Intent initial contribution
diff --git a/features/org.eclipse.mylyn.docs.intent-feature/.project b/features/org.eclipse.mylyn.docs.intent-feature/.project
new file mode 100644
index 0000000..84f1a9c
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.mylyn.docs.intent-feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.mylyn.docs.intent-feature/about.html b/features/org.eclipse.mylyn.docs.intent-feature/about.html
new file mode 100644
index 0000000..34ab520
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/about.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml"> 

+<head> 

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

+<title>Eclipse Foundation Software User Agreement</title> 

+</head> 

+ 

+<body lang="EN-US"> 

+<h2>Eclipse Foundation Software User Agreement</h2> 

+<p>April 14, 2010</p> 

+ 

+<h3>Usage Of Content</h3> 

+ 

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p> 

+ 

+<h3>Applicable Licenses</h3> 

+ 

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p> 

+ 

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p> 

+ 

+<ul> 

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li> 

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li> 

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li> 

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li> 

+</ul> 

+ 

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p> 

+ 

+<ul> 

+       <li>The top-level (root) directory</li> 

+       <li>Plug-in and Fragment directories</li> 

+       <li>Inside Plug-ins and Fragments packaged as JARs</li> 

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li> 

+       <li>Feature directories</li> 

+</ul> 

+ 

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p> 

+ 

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p> 

+ 

+<ul> 

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li> 

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li> 

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li> 

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li> 

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li> 

+</ul> 

+ 

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p> 

+ 

+ 

+<h3>Use of Provisioning Technology</h3> 

+ 

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a 

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a> 

+   (&quot;Specification&quot;).</p> 

+ 

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p> 

+ 

+<ol> 

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li> 

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li> 

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li> 

+</ol> 

+ 

+<h3>Cryptography</h3> 

+ 

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p> 

+ 

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p> 

+</body> 

+</html> 
\ No newline at end of file
diff --git a/features/org.eclipse.mylyn.docs.intent-feature/build.properties b/features/org.eclipse.mylyn.docs.intent-feature/build.properties
new file mode 100644
index 0000000..82ab19c
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml

diff --git a/features/org.eclipse.mylyn.docs.intent-feature/epl-v10.html b/features/org.eclipse.mylyn.docs.intent-feature/epl-v10.html
new file mode 100644
index 0000000..b15cf1a
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

+<html xmlns:o="urn:schemas-microsoft-com:office:office"

+xmlns:w="urn:schemas-microsoft-com:office:word"

+xmlns="http://www.w3.org/TR/REC-html40">

+

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

+<link rel=File-List

+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">

+<title>Eclipse Public License - Version 1.0</title>

+<style>

+<!--

+ /* Font Definitions */

+@font-face

+	{

+	panose-1:2 11 6 4 3 5 4 4 2 4;

+	mso-font-charset:0;

+	mso-font-pitch:variable;

+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}

+ /* Style Definitions */

+p.MsoNormal, li.MsoNormal, div.MsoNormal

+	{mso-style-parent:"";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p

+	{margin-right:0in;

+	mso-margin-top-alt:auto;

+	mso-margin-bottom-alt:auto;

+	margin-left:0in;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p.BalloonText, li.BalloonText, div.BalloonText

+	{mso-style-name:"Balloon Text";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:8.0pt;

+	

+	}

+@page Section1

+	{size:8.5in 11.0in;

+	margin:1.0in 1.25in 1.0in 1.25in;

+	mso-header-margin:.5in;

+	mso-footer-margin:.5in;

+	mso-paper-source:0;}

+div.Section1

+	{page:Section1;}

+-->

+</style>

+</head>

+

+<body lang="EN-US" style='tab-interval:.5in'>

+

+<div class=Section1>

+

+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>

+</p>

+

+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER

+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,

+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE

+OF THIS AGREEMENT.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+in the case of the initial Contributor, the initial code and documentation

+distributed under this Agreement, and<br clear=left>

+b) in the case of each subsequent Contributor:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+changes to the Program, and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+additions to the Program;</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where

+such changes and/or additions to the Program originate from and are distributed

+by that particular Contributor. A Contribution 'originates' from a Contributor

+if it was added to the Program by such Contributor itself or anyone acting on

+such Contributor's behalf. Contributions do not include additions to the

+Program which: (i) are separate modules of software distributed in conjunction

+with the Program under their own license agreement, and (ii) are not derivative

+works of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or

+entity that distributes the Program.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent

+claims licensable by a Contributor which are necessarily infringed by the use

+or sale of its Contribution alone or when combined with the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions

+distributed in accordance with this Agreement.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who

+receives the Program under this Agreement, including all Contributors.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+Subject to the terms of this Agreement, each Contributor hereby grants Recipient

+a non-exclusive, worldwide, royalty-free copyright license to<span

+style='color:red'> </span>reproduce, prepare derivative works of, publicly

+display, publicly perform, distribute and sublicense the Contribution of such

+Contributor, if any, and such derivative works, in source code and object code

+form.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+Subject to the terms of this Agreement, each Contributor hereby grants

+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free

+patent license under Licensed Patents to make, use, sell, offer to sell, import

+and otherwise transfer the Contribution of such Contributor, if any, in source

+code and object code form. This patent license shall apply to the combination

+of the Contribution and the Program if, at the time the Contribution is added

+by the Contributor, such addition of the Contribution causes such combination

+to be covered by the Licensed Patents. The patent license shall not apply to

+any other combinations which include the Contribution. No hardware per se is

+licensed hereunder. </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)

+Recipient understands that although each Contributor grants the licenses to its

+Contributions set forth herein, no assurances are provided by any Contributor

+that the Program does not infringe the patent or other intellectual property

+rights of any other entity. Each Contributor disclaims any liability to Recipient

+for claims brought by any other entity based on infringement of intellectual

+property rights or otherwise. As a condition to exercising the rights and

+licenses granted hereunder, each Recipient hereby assumes sole responsibility

+to secure any other intellectual property rights needed, if any. For example,

+if a third party patent license is required to allow Recipient to distribute

+the Program, it is Recipient's responsibility to acquire that license before

+distributing the Program.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)

+Each Contributor represents that to its knowledge it has sufficient copyright

+rights in its Contribution, if any, to grant the copyright license set forth in

+this Agreement. </span></p>

+

+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the

+Program in object code form under its own license agreement, provided that:</span>

+</p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it complies with the terms and conditions of this Agreement; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+its license agreement:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+effectively disclaims on behalf of all Contributors all warranties and

+conditions, express and implied, including warranties or conditions of title

+and non-infringement, and implied warranties or conditions of merchantability

+and fitness for a particular purpose; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+effectively excludes on behalf of all Contributors all liability for damages,

+including direct, indirect, special, incidental and consequential damages, such

+as lost profits; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)

+states that any provisions which differ from this Agreement are offered by that

+Contributor alone and not by any other party; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)

+states that source code for the Program is available from such Contributor, and

+informs licensees how to obtain it in a reasonable manner on or through a

+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>

+

+<p><span style='font-size:10.0pt'>When the Program is made available in source

+code form:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it must be made available under this Agreement; and </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a

+copy of this Agreement must be included with each copy of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any

+copyright notices contained within the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the

+originator of its Contribution, if any, in a manner that reasonably allows

+subsequent Recipients to identify the originator of the Contribution. </span></p>

+

+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>

+

+<p><span style='font-size:10.0pt'>Commercial distributors of software may

+accept certain responsibilities with respect to end users, business partners

+and the like. While this license is intended to facilitate the commercial use

+of the Program, the Contributor who includes the Program in a commercial

+product offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes the

+Program in a commercial product offering, such Contributor (&quot;Commercial

+Contributor&quot;) hereby agrees to defend and indemnify every other

+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and

+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other

+legal actions brought by a third party against the Indemnified Contributor to

+the extent caused by the acts or omissions of such Commercial Contributor in

+connection with its distribution of the Program in a commercial product

+offering. The obligations in this section do not apply to any claims or Losses

+relating to any actual or alleged intellectual property infringement. In order

+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial

+Contributor in writing of such claim, and b) allow the Commercial Contributor

+to control, and cooperate with the Commercial Contributor in, the defense and

+any related settlement negotiations. The Indemnified Contributor may participate

+in any such claim at its own expense.</span> </p>

+

+<p><span style='font-size:10.0pt'>For example, a Contributor might include the

+Program in a commercial product offering, Product X. That Contributor is then a

+Commercial Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance claims and

+warranties are such Commercial Contributor's responsibility alone. Under this

+section, the Commercial Contributor would have to defend claims against the

+other Contributors related to those performance claims and warranties, and if a

+court requires any other Contributor to pay any damages as a result, the

+Commercial Contributor must pay those damages.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT

+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,

+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,

+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely

+responsible for determining the appropriateness of using and distributing the

+Program and assumes all risks associated with its exercise of rights under this

+Agreement , including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs or

+equipment, and unavailability or interruption of operations. </span></p>

+

+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR

+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY

+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF

+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF

+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>

+

+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid

+or unenforceable under applicable law, it shall not affect the validity or

+enforceability of the remainder of the terms of this Agreement, and without

+further action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.</span> </p>

+

+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation

+against any entity (including a cross-claim or counterclaim in a lawsuit)

+alleging that the Program itself (excluding combinations of the Program with

+other software or hardware) infringes such Recipient's patent(s), then such

+Recipient's rights granted under Section 2(b) shall terminate as of the date

+such litigation is filed. </span></p>

+

+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement

+shall terminate if it fails to comply with any of the material terms or

+conditions of this Agreement and does not cure such failure in a reasonable

+period of time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use and

+distribution of the Program as soon as reasonably practicable. However,

+Recipient's obligations under this Agreement and any licenses granted by

+Recipient relating to the Program shall continue and survive. </span></p>

+

+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute

+copies of this Agreement, but in order to avoid inconsistency the Agreement is

+copyrighted and may only be modified in the following manner. The Agreement

+Steward reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement Steward has

+the right to modify this Agreement. The Eclipse Foundation is the initial

+Agreement Steward. The Eclipse Foundation may assign the responsibility to

+serve as the Agreement Steward to a suitable separate entity. Each new version

+of the Agreement will be given a distinguishing version number. The Program

+(including Contributions) may always be distributed subject to the version of

+the Agreement under which it was received. In addition, after a new version of

+the Agreement is published, Contributor may elect to distribute the Program

+(including its Contributions) under the new version. Except as expressly stated

+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to

+the intellectual property of any Contributor under this Agreement, whether

+expressly, by implication, estoppel or otherwise. All rights in the Program not

+expressly granted under this Agreement are reserved.</span> </p>

+

+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the

+State of New York and the intellectual property laws of the United States of

+America. No party to this Agreement will bring a legal action under this

+Agreement more than one year after the cause of action arose. Each party waives

+its rights to a jury trial in any resulting litigation.</span> </p>

+

+<p class=MsoNormal></p>

+

+</div>

+

+</body>

+

+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.mylyn.docs.intent-feature/feature.properties b/features/org.eclipse.mylyn.docs.intent-feature/feature.properties
new file mode 100644
index 0000000..79e5ef2
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/feature.properties
@@ -0,0 +1,155 @@
+################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+################################################################################

+featureName=Intent

+providerName=Eclipse Mylyn

+description=Intent

+

+copyrightURL = copyright.txt

+copyright = Copyright (c) 2010, 2011 Obeo, France. \n\

+All rights reserved. This program and the accompanying materials \n\

+are made available under the terms of the Eclipse Public License v1.0 \n\

+which accompanies this distribution, and is available at \n\

+http://www.eclipse.org/legal/epl-v10.html \n\

+ \n\

+Contributors: \n\

+   Obeo - initial API and implementation

+

+# "licenseURL" property - URL of the "Feature License"

+# do not translate value - just change to point to a locale-specific HTML page

+licenseURL=license.html

+

+# "license" property - text of the "Feature Update License"

+# should be plain text version of license agreement pointed to be "licenseURL"

+license=\

+Eclipse Foundation Software User Agreement\n\

+February 1, 2011\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+########### end of license property ##########################################
\ No newline at end of file
diff --git a/features/org.eclipse.mylyn.docs.intent-feature/feature.xml b/features/org.eclipse.mylyn.docs.intent-feature/feature.xml
new file mode 100644
index 0000000..25939da
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/feature.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.mylyn.docs.intent"

+      label="%featureName"

+      version="0.7.0.qualifier"

+      provider-name="%providerName"

+      plugin="org.eclipse.mylyn.docs.intent">

+

+   <description url="http://www.example.com/description">

+      [Enter Feature Description here.]

+   </description>

+

+   <copyright url="http://www.example.com/copyright">

+      [Enter Copyright Description here.]

+   </copyright>

+

+   <license url="http://www.example.com/license">

+      [Enter License Description here.]

+   </license>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.client.compiler"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.client.indexer"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.client.synchronizer"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.client.ui"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.client.ui.cdo"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.client.ui.ide"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.collab"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.collab.cdo"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.collab.common"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.collab.ide"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.compare"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.core"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.parser"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.mylyn.docs.intent-feature/license.html b/features/org.eclipse.mylyn.docs.intent-feature/license.html
new file mode 100644
index 0000000..5ef6811
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

+<title>Eclipse Foundation Software User Agreement</title>

+</head>

+

+<body lang="EN-US">

+<h2>Eclipse Foundation Software User Agreement</h2>

+<p>February 1, 2011</p>

+

+<h3>Usage Of Content</h3>

+

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>

+

+<h3>Applicable Licenses</h3>

+

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>

+

+<ul>

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li>

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>

+</ul>

+

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p>

+

+<ul>

+       <li>The top-level (root) directory</li>

+       <li>Plug-in and Fragment directories</li>

+       <li>Inside Plug-ins and Fragments packaged as JARs</li>

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>

+       <li>Feature directories</li>

+</ul>

+

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p>

+

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>

+

+<ul>

+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>

+</ul>

+

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>

+

+

+<h3>Use of Provisioning Technology</h3>

+

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>

+   (&quot;Specification&quot;).</p>

+

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>

+

+<ol>

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li>

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li>

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>

+</ol>

+

+<h3>Cryptography</h3>

+

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>

+

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>

+</body>

+</html>

diff --git a/features/org.eclipse.mylyn.docs.intent-feature/license.txt b/features/org.eclipse.mylyn.docs.intent-feature/license.txt
new file mode 100644
index 0000000..bc1ccc7
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/license.txt
@@ -0,0 +1,87 @@
+Eclipse Public License - v 1.0

+

+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

+

+1. DEFINITIONS

+

+"Contribution" means:

+

+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and

+b) in the case of each subsequent Contributor:

+

+i) changes to the Program, and

+

+ii) additions to the Program;

+

+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

+

+"Contributor" means any person or entity that distributes the Program.

+

+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

+

+"Program" means the Contributions distributed in accordance with this Agreement.

+

+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

+

+2. GRANT OF RIGHTS

+

+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

+

+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

+

+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

+

+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

+

+3. REQUIREMENTS

+

+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

+

+a) it complies with the terms and conditions of this Agreement; and

+

+b) its license agreement:

+

+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

+

+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

+

+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

+

+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

+

+When the Program is made available in source code form:

+

+a) it must be made available under this Agreement; and

+

+b) a copy of this Agreement must be included with each copy of the Program.

+

+Contributors may not remove or alter any copyright notices contained within the Program.

+

+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

+

+4. COMMERCIAL DISTRIBUTION

+

+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

+

+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

+

+5. NO WARRANTY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

+

+6. DISCLAIMER OF LIABILITY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+

+7. GENERAL

+

+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

+

+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

+

+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

+

+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

+

+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

+

diff --git a/features/org.eclipse.mylyn.docs.intent-feature/rootfiles/epl-v10.html b/features/org.eclipse.mylyn.docs.intent-feature/rootfiles/epl-v10.html
new file mode 100644
index 0000000..8ed1538
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/rootfiles/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

+<html xmlns:o="urn:schemas-microsoft-com:office:office"

+xmlns:w="urn:schemas-microsoft-com:office:word"

+xmlns="http://www.w3.org/TR/REC-html40">

+

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

+<link rel=File-List

+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">

+<title>Eclipse Public License - Version 1.0</title>

+<style>

+<!--

+ /* Font Definitions */

+@font-face

+	{

+	panose-1:2 11 6 4 3 5 4 4 2 4;

+	mso-font-charset:0;

+	mso-font-pitch:variable;

+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}

+ /* Style Definitions */

+p.MsoNormal, li.MsoNormal, div.MsoNormal

+	{mso-style-parent:"";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p

+	{margin-right:0in;

+	mso-margin-top-alt:auto;

+	mso-margin-bottom-alt:auto;

+	margin-left:0in;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p.BalloonText, li.BalloonText, div.BalloonText

+	{mso-style-name:"Balloon Text";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:8.0pt;

+	

+	}

+@page Section1

+	{size:8.5in 11.0in;

+	margin:1.0in 1.25in 1.0in 1.25in;

+	mso-header-margin:.5in;

+	mso-footer-margin:.5in;

+	mso-paper-source:0;}

+div.Section1

+	{page:Section1;}

+-->

+</style>

+</head>

+

+<body lang="EN-US" style='tab-interval:.5in'>

+

+<div class=Section1>

+

+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>

+</p>

+

+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER

+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,

+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE

+OF THIS AGREEMENT.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+in the case of the initial Contributor, the initial code and documentation

+distributed under this Agreement, and<br clear=left>

+b) in the case of each subsequent Contributor:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+changes to the Program, and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+additions to the Program;</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where

+such changes and/or additions to the Program originate from and are distributed

+by that particular Contributor. A Contribution 'originates' from a Contributor

+if it was added to the Program by such Contributor itself or anyone acting on

+such Contributor's behalf. Contributions do not include additions to the

+Program which: (i) are separate modules of software distributed in conjunction

+with the Program under their own license agreement, and (ii) are not derivative

+works of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or

+entity that distributes the Program.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent

+claims licensable by a Contributor which are necessarily infringed by the use

+or sale of its Contribution alone or when combined with the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions

+distributed in accordance with this Agreement.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who

+receives the Program under this Agreement, including all Contributors.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+Subject to the terms of this Agreement, each Contributor hereby grants Recipient

+a non-exclusive, worldwide, royalty-free copyright license to<span

+style='color:red'> </span>reproduce, prepare derivative works of, publicly

+display, publicly perform, distribute and sublicense the Contribution of such

+Contributor, if any, and such derivative works, in source code and object code

+form.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+Subject to the terms of this Agreement, each Contributor hereby grants

+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free

+patent license under Licensed Patents to make, use, sell, offer to sell, import

+and otherwise transfer the Contribution of such Contributor, if any, in source

+code and object code form. This patent license shall apply to the combination

+of the Contribution and the Program if, at the time the Contribution is added

+by the Contributor, such addition of the Contribution causes such combination

+to be covered by the Licensed Patents. The patent license shall not apply to

+any other combinations which include the Contribution. No hardware per se is

+licensed hereunder. </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)

+Recipient understands that although each Contributor grants the licenses to its

+Contributions set forth herein, no assurances are provided by any Contributor

+that the Program does not infringe the patent or other intellectual property

+rights of any other entity. Each Contributor disclaims any liability to Recipient

+for claims brought by any other entity based on infringement of intellectual

+property rights or otherwise. As a condition to exercising the rights and

+licenses granted hereunder, each Recipient hereby assumes sole responsibility

+to secure any other intellectual property rights needed, if any. For example,

+if a third party patent license is required to allow Recipient to distribute

+the Program, it is Recipient's responsibility to acquire that license before

+distributing the Program.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)

+Each Contributor represents that to its knowledge it has sufficient copyright

+rights in its Contribution, if any, to grant the copyright license set forth in

+this Agreement. </span></p>

+

+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the

+Program in object code form under its own license agreement, provided that:</span>

+</p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it complies with the terms and conditions of this Agreement; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+its license agreement:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+effectively disclaims on behalf of all Contributors all warranties and

+conditions, express and implied, including warranties or conditions of title

+and non-infringement, and implied warranties or conditions of merchantability

+and fitness for a particular purpose; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+effectively excludes on behalf of all Contributors all liability for damages,

+including direct, indirect, special, incidental and consequential damages, such

+as lost profits; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)

+states that any provisions which differ from this Agreement are offered by that

+Contributor alone and not by any other party; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)

+states that source code for the Program is available from such Contributor, and

+informs licensees how to obtain it in a reasonable manner on or through a

+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>

+

+<p><span style='font-size:10.0pt'>When the Program is made available in source

+code form:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it must be made available under this Agreement; and </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a

+copy of this Agreement must be included with each copy of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any

+copyright notices contained within the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the

+originator of its Contribution, if any, in a manner that reasonably allows

+subsequent Recipients to identify the originator of the Contribution. </span></p>

+

+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>

+

+<p><span style='font-size:10.0pt'>Commercial distributors of software may

+accept certain responsibilities with respect to end users, business partners

+and the like. While this license is intended to facilitate the commercial use

+of the Program, the Contributor who includes the Program in a commercial

+product offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes the

+Program in a commercial product offering, such Contributor (&quot;Commercial

+Contributor&quot;) hereby agrees to defend and indemnify every other

+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and

+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other

+legal actions brought by a third party against the Indemnified Contributor to

+the extent caused by the acts or omissions of such Commercial Contributor in

+connection with its distribution of the Program in a commercial product

+offering. The obligations in this section do not apply to any claims or Losses

+relating to any actual or alleged intellectual property infringement. In order

+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial

+Contributor in writing of such claim, and b) allow the Commercial Contributor

+to control, and cooperate with the Commercial Contributor in, the defense and

+any related settlement negotiations. The Indemnified Contributor may participate

+in any such claim at its own expense.</span> </p>

+

+<p><span style='font-size:10.0pt'>For example, a Contributor might include the

+Program in a commercial product offering, Product X. That Contributor is then a

+Commercial Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance claims and

+warranties are such Commercial Contributor's responsibility alone. Under this

+section, the Commercial Contributor would have to defend claims against the

+other Contributors related to those performance claims and warranties, and if a

+court requires any other Contributor to pay any damages as a result, the

+Commercial Contributor must pay those damages.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT

+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,

+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,

+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely

+responsible for determining the appropriateness of using and distributing the

+Program and assumes all risks associated with its exercise of rights under this

+Agreement , including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs or

+equipment, and unavailability or interruption of operations. </span></p>

+

+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR

+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY

+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF

+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF

+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>

+

+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid

+or unenforceable under applicable law, it shall not affect the validity or

+enforceability of the remainder of the terms of this Agreement, and without

+further action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.</span> </p>

+

+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation

+against any entity (including a cross-claim or counterclaim in a lawsuit)

+alleging that the Program itself (excluding combinations of the Program with

+other software or hardware) infringes such Recipient's patent(s), then such

+Recipient's rights granted under Section 2(b) shall terminate as of the date

+such litigation is filed. </span></p>

+

+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement

+shall terminate if it fails to comply with any of the material terms or

+conditions of this Agreement and does not cure such failure in a reasonable

+period of time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use and

+distribution of the Program as soon as reasonably practicable. However,

+Recipient's obligations under this Agreement and any licenses granted by

+Recipient relating to the Program shall continue and survive. </span></p>

+

+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute

+copies of this Agreement, but in order to avoid inconsistency the Agreement is

+copyrighted and may only be modified in the following manner. The Agreement

+Steward reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement Steward has

+the right to modify this Agreement. The Eclipse Foundation is the initial

+Agreement Steward. The Eclipse Foundation may assign the responsibility to

+serve as the Agreement Steward to a suitable separate entity. Each new version

+of the Agreement will be given a distinguishing version number. The Program

+(including Contributions) may always be distributed subject to the version of

+the Agreement under which it was received. In addition, after a new version of

+the Agreement is published, Contributor may elect to distribute the Program

+(including its Contributions) under the new version. Except as expressly stated

+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to

+the intellectual property of any Contributor under this Agreement, whether

+expressly, by implication, estoppel or otherwise. All rights in the Program not

+expressly granted under this Agreement are reserved.</span> </p>

+

+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the

+State of New York and the intellectual property laws of the United States of

+America. No party to this Agreement will bring a legal action under this

+Agreement more than one year after the cause of action arose. Each party waives

+its rights to a jury trial in any resulting litigation.</span> </p>

+

+<p class=MsoNormal></p>

+

+</div>

+

+</body>

+

+</html>

diff --git a/features/org.eclipse.mylyn.docs.intent-feature/rootfiles/notice.html b/features/org.eclipse.mylyn.docs.intent-feature/rootfiles/notice.html
new file mode 100644
index 0000000..6930540
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent-feature/rootfiles/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

+<title>Eclipse Foundation Software User Agreement</title>

+</head>

+

+<body lang="EN-US">

+<h2>Eclipse Foundation Software User Agreement</h2>

+<p>April 14, 2010</p>

+

+<h3>Usage Of Content</h3>

+

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>

+

+<h3>Applicable Licenses</h3>

+

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>

+

+<ul>

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li>

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>

+</ul>

+

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p>

+

+<ul>

+       <li>The top-level (root) directory</li>

+       <li>Plug-in and Fragment directories</li>

+       <li>Inside Plug-ins and Fragments packaged as JARs</li>

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>

+       <li>Feature directories</li>

+</ul>

+

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p>

+

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>

+

+<ul>

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>

+</ul>

+

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>

+

+

+<h3>Use of Provisioning Technology</h3>

+

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>

+   (&quot;Specification&quot;).</p>

+

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>

+

+<ol>

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li>

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li>

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>

+</ol>

+

+<h3>Cryptography</h3>

+

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>

+

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>

+</body>

+</html>

diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/.project b/features/org.eclipse.mylyn.docs.intent.tests-feature/.project
new file mode 100644
index 0000000..2e7cbd5
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.mylyn.docs.intent.tests-feature</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.pde.FeatureBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.FeatureNature</nature>

+	</natures>

+</projectDescription>

diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/about.html b/features/org.eclipse.mylyn.docs.intent.tests-feature/about.html
new file mode 100644
index 0000000..34ab520
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/about.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml"> 

+<head> 

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

+<title>Eclipse Foundation Software User Agreement</title> 

+</head> 

+ 

+<body lang="EN-US"> 

+<h2>Eclipse Foundation Software User Agreement</h2> 

+<p>April 14, 2010</p> 

+ 

+<h3>Usage Of Content</h3> 

+ 

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p> 

+ 

+<h3>Applicable Licenses</h3> 

+ 

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p> 

+ 

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p> 

+ 

+<ul> 

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li> 

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li> 

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li> 

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li> 

+</ul> 

+ 

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p> 

+ 

+<ul> 

+       <li>The top-level (root) directory</li> 

+       <li>Plug-in and Fragment directories</li> 

+       <li>Inside Plug-ins and Fragments packaged as JARs</li> 

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li> 

+       <li>Feature directories</li> 

+</ul> 

+ 

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p> 

+ 

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p> 

+ 

+<ul> 

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li> 

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li> 

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li> 

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li> 

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li> 

+</ul> 

+ 

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p> 

+ 

+ 

+<h3>Use of Provisioning Technology</h3> 

+ 

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a 

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a> 

+   (&quot;Specification&quot;).</p> 

+ 

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p> 

+ 

+<ol> 

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li> 

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li> 

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li> 

+</ol> 

+ 

+<h3>Cryptography</h3> 

+ 

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p> 

+ 

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p> 

+</body> 

+</html> 
\ No newline at end of file
diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/build.properties b/features/org.eclipse.mylyn.docs.intent.tests-feature/build.properties
new file mode 100644
index 0000000..82ab19c
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml

diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/copyright.txt b/features/org.eclipse.mylyn.docs.intent.tests-feature/copyright.txt
new file mode 100644
index 0000000..09d3409
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/copyright.txt
@@ -0,0 +1,8 @@
+Copyright (c) 2010, 2011 Obeo.

+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:

+   Obeo - initial API and implementation
\ No newline at end of file
diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/epl-v10.html b/features/org.eclipse.mylyn.docs.intent.tests-feature/epl-v10.html
new file mode 100644
index 0000000..b15cf1a
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

+<html xmlns:o="urn:schemas-microsoft-com:office:office"

+xmlns:w="urn:schemas-microsoft-com:office:word"

+xmlns="http://www.w3.org/TR/REC-html40">

+

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

+<link rel=File-List

+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">

+<title>Eclipse Public License - Version 1.0</title>

+<style>

+<!--

+ /* Font Definitions */

+@font-face

+	{

+	panose-1:2 11 6 4 3 5 4 4 2 4;

+	mso-font-charset:0;

+	mso-font-pitch:variable;

+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}

+ /* Style Definitions */

+p.MsoNormal, li.MsoNormal, div.MsoNormal

+	{mso-style-parent:"";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p

+	{margin-right:0in;

+	mso-margin-top-alt:auto;

+	mso-margin-bottom-alt:auto;

+	margin-left:0in;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p.BalloonText, li.BalloonText, div.BalloonText

+	{mso-style-name:"Balloon Text";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:8.0pt;

+	

+	}

+@page Section1

+	{size:8.5in 11.0in;

+	margin:1.0in 1.25in 1.0in 1.25in;

+	mso-header-margin:.5in;

+	mso-footer-margin:.5in;

+	mso-paper-source:0;}

+div.Section1

+	{page:Section1;}

+-->

+</style>

+</head>

+

+<body lang="EN-US" style='tab-interval:.5in'>

+

+<div class=Section1>

+

+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>

+</p>

+

+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER

+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,

+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE

+OF THIS AGREEMENT.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+in the case of the initial Contributor, the initial code and documentation

+distributed under this Agreement, and<br clear=left>

+b) in the case of each subsequent Contributor:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+changes to the Program, and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+additions to the Program;</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where

+such changes and/or additions to the Program originate from and are distributed

+by that particular Contributor. A Contribution 'originates' from a Contributor

+if it was added to the Program by such Contributor itself or anyone acting on

+such Contributor's behalf. Contributions do not include additions to the

+Program which: (i) are separate modules of software distributed in conjunction

+with the Program under their own license agreement, and (ii) are not derivative

+works of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or

+entity that distributes the Program.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent

+claims licensable by a Contributor which are necessarily infringed by the use

+or sale of its Contribution alone or when combined with the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions

+distributed in accordance with this Agreement.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who

+receives the Program under this Agreement, including all Contributors.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+Subject to the terms of this Agreement, each Contributor hereby grants Recipient

+a non-exclusive, worldwide, royalty-free copyright license to<span

+style='color:red'> </span>reproduce, prepare derivative works of, publicly

+display, publicly perform, distribute and sublicense the Contribution of such

+Contributor, if any, and such derivative works, in source code and object code

+form.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+Subject to the terms of this Agreement, each Contributor hereby grants

+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free

+patent license under Licensed Patents to make, use, sell, offer to sell, import

+and otherwise transfer the Contribution of such Contributor, if any, in source

+code and object code form. This patent license shall apply to the combination

+of the Contribution and the Program if, at the time the Contribution is added

+by the Contributor, such addition of the Contribution causes such combination

+to be covered by the Licensed Patents. The patent license shall not apply to

+any other combinations which include the Contribution. No hardware per se is

+licensed hereunder. </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)

+Recipient understands that although each Contributor grants the licenses to its

+Contributions set forth herein, no assurances are provided by any Contributor

+that the Program does not infringe the patent or other intellectual property

+rights of any other entity. Each Contributor disclaims any liability to Recipient

+for claims brought by any other entity based on infringement of intellectual

+property rights or otherwise. As a condition to exercising the rights and

+licenses granted hereunder, each Recipient hereby assumes sole responsibility

+to secure any other intellectual property rights needed, if any. For example,

+if a third party patent license is required to allow Recipient to distribute

+the Program, it is Recipient's responsibility to acquire that license before

+distributing the Program.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)

+Each Contributor represents that to its knowledge it has sufficient copyright

+rights in its Contribution, if any, to grant the copyright license set forth in

+this Agreement. </span></p>

+

+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the

+Program in object code form under its own license agreement, provided that:</span>

+</p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it complies with the terms and conditions of this Agreement; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+its license agreement:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+effectively disclaims on behalf of all Contributors all warranties and

+conditions, express and implied, including warranties or conditions of title

+and non-infringement, and implied warranties or conditions of merchantability

+and fitness for a particular purpose; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+effectively excludes on behalf of all Contributors all liability for damages,

+including direct, indirect, special, incidental and consequential damages, such

+as lost profits; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)

+states that any provisions which differ from this Agreement are offered by that

+Contributor alone and not by any other party; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)

+states that source code for the Program is available from such Contributor, and

+informs licensees how to obtain it in a reasonable manner on or through a

+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>

+

+<p><span style='font-size:10.0pt'>When the Program is made available in source

+code form:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it must be made available under this Agreement; and </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a

+copy of this Agreement must be included with each copy of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any

+copyright notices contained within the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the

+originator of its Contribution, if any, in a manner that reasonably allows

+subsequent Recipients to identify the originator of the Contribution. </span></p>

+

+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>

+

+<p><span style='font-size:10.0pt'>Commercial distributors of software may

+accept certain responsibilities with respect to end users, business partners

+and the like. While this license is intended to facilitate the commercial use

+of the Program, the Contributor who includes the Program in a commercial

+product offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes the

+Program in a commercial product offering, such Contributor (&quot;Commercial

+Contributor&quot;) hereby agrees to defend and indemnify every other

+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and

+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other

+legal actions brought by a third party against the Indemnified Contributor to

+the extent caused by the acts or omissions of such Commercial Contributor in

+connection with its distribution of the Program in a commercial product

+offering. The obligations in this section do not apply to any claims or Losses

+relating to any actual or alleged intellectual property infringement. In order

+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial

+Contributor in writing of such claim, and b) allow the Commercial Contributor

+to control, and cooperate with the Commercial Contributor in, the defense and

+any related settlement negotiations. The Indemnified Contributor may participate

+in any such claim at its own expense.</span> </p>

+

+<p><span style='font-size:10.0pt'>For example, a Contributor might include the

+Program in a commercial product offering, Product X. That Contributor is then a

+Commercial Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance claims and

+warranties are such Commercial Contributor's responsibility alone. Under this

+section, the Commercial Contributor would have to defend claims against the

+other Contributors related to those performance claims and warranties, and if a

+court requires any other Contributor to pay any damages as a result, the

+Commercial Contributor must pay those damages.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT

+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,

+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,

+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely

+responsible for determining the appropriateness of using and distributing the

+Program and assumes all risks associated with its exercise of rights under this

+Agreement , including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs or

+equipment, and unavailability or interruption of operations. </span></p>

+

+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR

+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY

+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF

+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF

+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>

+

+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid

+or unenforceable under applicable law, it shall not affect the validity or

+enforceability of the remainder of the terms of this Agreement, and without

+further action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.</span> </p>

+

+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation

+against any entity (including a cross-claim or counterclaim in a lawsuit)

+alleging that the Program itself (excluding combinations of the Program with

+other software or hardware) infringes such Recipient's patent(s), then such

+Recipient's rights granted under Section 2(b) shall terminate as of the date

+such litigation is filed. </span></p>

+

+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement

+shall terminate if it fails to comply with any of the material terms or

+conditions of this Agreement and does not cure such failure in a reasonable

+period of time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use and

+distribution of the Program as soon as reasonably practicable. However,

+Recipient's obligations under this Agreement and any licenses granted by

+Recipient relating to the Program shall continue and survive. </span></p>

+

+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute

+copies of this Agreement, but in order to avoid inconsistency the Agreement is

+copyrighted and may only be modified in the following manner. The Agreement

+Steward reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement Steward has

+the right to modify this Agreement. The Eclipse Foundation is the initial

+Agreement Steward. The Eclipse Foundation may assign the responsibility to

+serve as the Agreement Steward to a suitable separate entity. Each new version

+of the Agreement will be given a distinguishing version number. The Program

+(including Contributions) may always be distributed subject to the version of

+the Agreement under which it was received. In addition, after a new version of

+the Agreement is published, Contributor may elect to distribute the Program

+(including its Contributions) under the new version. Except as expressly stated

+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to

+the intellectual property of any Contributor under this Agreement, whether

+expressly, by implication, estoppel or otherwise. All rights in the Program not

+expressly granted under this Agreement are reserved.</span> </p>

+

+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the

+State of New York and the intellectual property laws of the United States of

+America. No party to this Agreement will bring a legal action under this

+Agreement more than one year after the cause of action arose. Each party waives

+its rights to a jury trial in any resulting litigation.</span> </p>

+

+<p class=MsoNormal></p>

+

+</div>

+

+</body>

+

+</html>
\ No newline at end of file
diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/feature.properties b/features/org.eclipse.mylyn.docs.intent.tests-feature/feature.properties
new file mode 100644
index 0000000..1a115cd
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/feature.properties
@@ -0,0 +1,155 @@
+################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+################################################################################

+featureName=Intent Tests

+providerName=Eclipse Mylyn

+description=Intent tests suites

+

+copyrightURL = copyright.txt

+copyright = Copyright (c) 2010, 2011 Obeo, France. \n\

+All rights reserved. This program and the accompanying materials \n\

+are made available under the terms of the Eclipse Public License v1.0 \n\

+which accompanies this distribution, and is available at \n\

+http://www.eclipse.org/legal/epl-v10.html \n\

+ \n\

+Contributors: \n\

+   Obeo - initial API and implementation

+

+# "licenseURL" property - URL of the "Feature License"

+# do not translate value - just change to point to a locale-specific HTML page

+licenseURL=license.html

+

+# "license" property - text of the "Feature Update License"

+# should be plain text version of license agreement pointed to be "licenseURL"

+license=\

+Eclipse Foundation Software User Agreement\n\

+February 1, 2011\n\

+\n\

+Usage Of Content\n\

+\n\

+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\

+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\

+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\

+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\

+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\

+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\

+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\

+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\

+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\

+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\

+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\

+\n\

+Applicable Licenses\n\

+\n\

+Unless otherwise indicated, all Content made available by the\n\

+Eclipse Foundation is provided to you under the terms and conditions of\n\

+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\

+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\

+For purposes of the EPL, "Program" will mean the Content.\n\

+\n\

+Content includes, but is not limited to, source code, object code,\n\

+documentation and other files maintained in the Eclipse Foundation source code\n\

+repository ("Repository") in software modules ("Modules") and made available\n\

+as downloadable archives ("Downloads").\n\

+\n\

+       - Content may be structured and packaged into modules to facilitate delivering,\n\

+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\

+         plug-in fragments ("Fragments"), and features ("Features").\n\

+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\

+         in a directory named "plugins".\n\

+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\

+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\

+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\

+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\

+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\

+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\

+\n\

+The terms and conditions governing Plug-ins and Fragments should be\n\

+contained in files named "about.html" ("Abouts"). The terms and\n\

+conditions governing Features and Included Features should be contained\n\

+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\

+Licenses may be located in any directory of a Download or Module\n\

+including, but not limited to the following locations:\n\

+\n\

+       - The top-level (root) directory\n\

+       - Plug-in and Fragment directories\n\

+       - Inside Plug-ins and Fragments packaged as JARs\n\

+       - Sub-directories of the directory named "src" of certain Plug-ins\n\

+       - Feature directories\n\

+\n\

+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\

+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\

+Update License") during the installation process. If the Feature contains\n\

+Included Features, the Feature Update License should either provide you\n\

+with the terms and conditions governing the Included Features or inform\n\

+you where you can locate them. Feature Update Licenses may be found in\n\

+the "license" property of files named "feature.properties" found within a Feature.\n\

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\

+terms and conditions (or references to such terms and conditions) that\n\

+govern your use of the associated Content in that directory.\n\

+\n\

+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\

+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\

+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\

+\n\

+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\

+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\

+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\

+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\

+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\

+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\

+\n\

+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\

+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\

+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\

+govern that particular Content.\n\

+\n\

+\n\Use of Provisioning Technology\n\

+\n\

+The Eclipse Foundation makes available provisioning software, examples of which include,\n\

+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\

+the purpose of allowing users to install software, documentation, information and/or\n\

+other materials (collectively "Installable Software"). This capability is provided with\n\

+the intent of allowing such users to install, extend and update Eclipse-based products.\n\

+Information about packaging Installable Software is available at\n\

+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\

+\n\

+You may use Provisioning Technology to allow other parties to install Installable Software.\n\

+You shall be responsible for enabling the applicable license agreements relating to the\n\

+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\

+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\

+making it available in accordance with the Specification, you further acknowledge your\n\

+agreement to, and the acquisition of all necessary rights to permit the following:\n\

+\n\

+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\

+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\

+          extending or updating the functionality of an Eclipse-based product.\n\

+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\

+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\

+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\

+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\

+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\

+          with the Specification. Such Installable Software Agreement must inform the user of the\n\

+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\

+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\

+          indication of agreement by the user, the provisioning Technology will complete installation\n\

+          of the Installable Software.\n\

+\n\

+Cryptography\n\

+\n\

+Content may contain encryption software. The country in which you are\n\

+currently may have restrictions on the import, possession, and use,\n\

+and/or re-export to another country, of encryption software. BEFORE\n\

+using any encryption software, please check the country's laws,\n\

+regulations and policies concerning the import, possession, or use, and\n\

+re-export of encryption software, to see if this is permitted.\n\

+\n\

+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n

+########### end of license property ##########################################
\ No newline at end of file
diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/feature.xml b/features/org.eclipse.mylyn.docs.intent.tests-feature/feature.xml
new file mode 100644
index 0000000..0beb6ab
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/feature.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<feature

+      id="org.eclipse.mylyn.docs.intent.tests"

+      label="%featureName"

+      version="0.7.0.qualifier"

+      provider-name="%providerName">

+

+   <description url="http://www.example.com/description">

+      [Enter Feature Description here.]

+   </description>

+

+   <copyright url="http://www.example.com/copyright">

+      [Enter Copyright Description here.]

+   </copyright>

+

+   <license url="http://www.example.com/license">

+      [Enter License Description here.]

+   </license>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.collab.test"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.parser.test"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+   <plugin

+         id="org.eclipse.mylyn.docs.intent.markup.test"

+         download-size="0"

+         install-size="0"

+         version="0.0.0"

+         unpack="false"/>

+

+</feature>

diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/license.html b/features/org.eclipse.mylyn.docs.intent.tests-feature/license.html
new file mode 100644
index 0000000..5ef6811
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/license.html
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

+<title>Eclipse Foundation Software User Agreement</title>

+</head>

+

+<body lang="EN-US">

+<h2>Eclipse Foundation Software User Agreement</h2>

+<p>February 1, 2011</p>

+

+<h3>Usage Of Content</h3>

+

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>

+

+<h3>Applicable Licenses</h3>

+

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>

+

+<ul>

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li>

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>

+</ul>

+

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p>

+

+<ul>

+       <li>The top-level (root) directory</li>

+       <li>Plug-in and Fragment directories</li>

+       <li>Inside Plug-ins and Fragments packaged as JARs</li>

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>

+       <li>Feature directories</li>

+</ul>

+

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p>

+

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>

+

+<ul>

+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>

+</ul>

+

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>

+

+

+<h3>Use of Provisioning Technology</h3>

+

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>

+   (&quot;Specification&quot;).</p>

+

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>

+

+<ol>

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li>

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li>

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>

+</ol>

+

+<h3>Cryptography</h3>

+

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>

+

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>

+</body>

+</html>

diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/license.txt b/features/org.eclipse.mylyn.docs.intent.tests-feature/license.txt
new file mode 100644
index 0000000..bc1ccc7
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/license.txt
@@ -0,0 +1,87 @@
+Eclipse Public License - v 1.0

+

+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

+

+1. DEFINITIONS

+

+"Contribution" means:

+

+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and

+b) in the case of each subsequent Contributor:

+

+i) changes to the Program, and

+

+ii) additions to the Program;

+

+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

+

+"Contributor" means any person or entity that distributes the Program.

+

+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

+

+"Program" means the Contributions distributed in accordance with this Agreement.

+

+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

+

+2. GRANT OF RIGHTS

+

+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

+

+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

+

+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

+

+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

+

+3. REQUIREMENTS

+

+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

+

+a) it complies with the terms and conditions of this Agreement; and

+

+b) its license agreement:

+

+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

+

+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

+

+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

+

+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

+

+When the Program is made available in source code form:

+

+a) it must be made available under this Agreement; and

+

+b) a copy of this Agreement must be included with each copy of the Program.

+

+Contributors may not remove or alter any copyright notices contained within the Program.

+

+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

+

+4. COMMERCIAL DISTRIBUTION

+

+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

+

+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

+

+5. NO WARRANTY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

+

+6. DISCLAIMER OF LIABILITY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+

+7. GENERAL

+

+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

+

+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

+

+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

+

+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

+

+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

+

diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/rootfiles/epl-v10.html b/features/org.eclipse.mylyn.docs.intent.tests-feature/rootfiles/epl-v10.html
new file mode 100644
index 0000000..8ed1538
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/rootfiles/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

+<html xmlns:o="urn:schemas-microsoft-com:office:office"

+xmlns:w="urn:schemas-microsoft-com:office:word"

+xmlns="http://www.w3.org/TR/REC-html40">

+

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

+<link rel=File-List

+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">

+<title>Eclipse Public License - Version 1.0</title>

+<style>

+<!--

+ /* Font Definitions */

+@font-face

+	{

+	panose-1:2 11 6 4 3 5 4 4 2 4;

+	mso-font-charset:0;

+	mso-font-pitch:variable;

+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}

+ /* Style Definitions */

+p.MsoNormal, li.MsoNormal, div.MsoNormal

+	{mso-style-parent:"";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p

+	{margin-right:0in;

+	mso-margin-top-alt:auto;

+	mso-margin-bottom-alt:auto;

+	margin-left:0in;

+	mso-pagination:widow-orphan;

+	font-size:12.0pt;

+	}

+p.BalloonText, li.BalloonText, div.BalloonText

+	{mso-style-name:"Balloon Text";

+	margin:0in;

+	margin-bottom:.0001pt;

+	mso-pagination:widow-orphan;

+	font-size:8.0pt;

+	

+	}

+@page Section1

+	{size:8.5in 11.0in;

+	margin:1.0in 1.25in 1.0in 1.25in;

+	mso-header-margin:.5in;

+	mso-footer-margin:.5in;

+	mso-paper-source:0;}

+div.Section1

+	{page:Section1;}

+-->

+</style>

+</head>

+

+<body lang="EN-US" style='tab-interval:.5in'>

+

+<div class=Section1>

+

+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>

+</p>

+

+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER

+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,

+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE

+OF THIS AGREEMENT.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+in the case of the initial Contributor, the initial code and documentation

+distributed under this Agreement, and<br clear=left>

+b) in the case of each subsequent Contributor:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+changes to the Program, and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+additions to the Program;</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where

+such changes and/or additions to the Program originate from and are distributed

+by that particular Contributor. A Contribution 'originates' from a Contributor

+if it was added to the Program by such Contributor itself or anyone acting on

+such Contributor's behalf. Contributions do not include additions to the

+Program which: (i) are separate modules of software distributed in conjunction

+with the Program under their own license agreement, and (ii) are not derivative

+works of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or

+entity that distributes the Program.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent

+claims licensable by a Contributor which are necessarily infringed by the use

+or sale of its Contribution alone or when combined with the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions

+distributed in accordance with this Agreement.</span> </p>

+

+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who

+receives the Program under this Agreement, including all Contributors.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+Subject to the terms of this Agreement, each Contributor hereby grants Recipient

+a non-exclusive, worldwide, royalty-free copyright license to<span

+style='color:red'> </span>reproduce, prepare derivative works of, publicly

+display, publicly perform, distribute and sublicense the Contribution of such

+Contributor, if any, and such derivative works, in source code and object code

+form.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+Subject to the terms of this Agreement, each Contributor hereby grants

+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free

+patent license under Licensed Patents to make, use, sell, offer to sell, import

+and otherwise transfer the Contribution of such Contributor, if any, in source

+code and object code form. This patent license shall apply to the combination

+of the Contribution and the Program if, at the time the Contribution is added

+by the Contributor, such addition of the Contribution causes such combination

+to be covered by the Licensed Patents. The patent license shall not apply to

+any other combinations which include the Contribution. No hardware per se is

+licensed hereunder. </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)

+Recipient understands that although each Contributor grants the licenses to its

+Contributions set forth herein, no assurances are provided by any Contributor

+that the Program does not infringe the patent or other intellectual property

+rights of any other entity. Each Contributor disclaims any liability to Recipient

+for claims brought by any other entity based on infringement of intellectual

+property rights or otherwise. As a condition to exercising the rights and

+licenses granted hereunder, each Recipient hereby assumes sole responsibility

+to secure any other intellectual property rights needed, if any. For example,

+if a third party patent license is required to allow Recipient to distribute

+the Program, it is Recipient's responsibility to acquire that license before

+distributing the Program.</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)

+Each Contributor represents that to its knowledge it has sufficient copyright

+rights in its Contribution, if any, to grant the copyright license set forth in

+this Agreement. </span></p>

+

+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>

+

+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the

+Program in object code form under its own license agreement, provided that:</span>

+</p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it complies with the terms and conditions of this Agreement; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)

+its license agreement:</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)

+effectively disclaims on behalf of all Contributors all warranties and

+conditions, express and implied, including warranties or conditions of title

+and non-infringement, and implied warranties or conditions of merchantability

+and fitness for a particular purpose; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)

+effectively excludes on behalf of all Contributors all liability for damages,

+including direct, indirect, special, incidental and consequential damages, such

+as lost profits; </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)

+states that any provisions which differ from this Agreement are offered by that

+Contributor alone and not by any other party; and</span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)

+states that source code for the Program is available from such Contributor, and

+informs licensees how to obtain it in a reasonable manner on or through a

+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>

+

+<p><span style='font-size:10.0pt'>When the Program is made available in source

+code form:</span> </p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)

+it must be made available under this Agreement; and </span></p>

+

+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a

+copy of this Agreement must be included with each copy of the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any

+copyright notices contained within the Program. </span></p>

+

+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the

+originator of its Contribution, if any, in a manner that reasonably allows

+subsequent Recipients to identify the originator of the Contribution. </span></p>

+

+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>

+

+<p><span style='font-size:10.0pt'>Commercial distributors of software may

+accept certain responsibilities with respect to end users, business partners

+and the like. While this license is intended to facilitate the commercial use

+of the Program, the Contributor who includes the Program in a commercial

+product offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes the

+Program in a commercial product offering, such Contributor (&quot;Commercial

+Contributor&quot;) hereby agrees to defend and indemnify every other

+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and

+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other

+legal actions brought by a third party against the Indemnified Contributor to

+the extent caused by the acts or omissions of such Commercial Contributor in

+connection with its distribution of the Program in a commercial product

+offering. The obligations in this section do not apply to any claims or Losses

+relating to any actual or alleged intellectual property infringement. In order

+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial

+Contributor in writing of such claim, and b) allow the Commercial Contributor

+to control, and cooperate with the Commercial Contributor in, the defense and

+any related settlement negotiations. The Indemnified Contributor may participate

+in any such claim at its own expense.</span> </p>

+

+<p><span style='font-size:10.0pt'>For example, a Contributor might include the

+Program in a commercial product offering, Product X. That Contributor is then a

+Commercial Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance claims and

+warranties are such Commercial Contributor's responsibility alone. Under this

+section, the Commercial Contributor would have to defend claims against the

+other Contributors related to those performance claims and warranties, and if a

+court requires any other Contributor to pay any damages as a result, the

+Commercial Contributor must pay those damages.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT

+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,

+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,

+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely

+responsible for determining the appropriateness of using and distributing the

+Program and assumes all risks associated with its exercise of rights under this

+Agreement , including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs or

+equipment, and unavailability or interruption of operations. </span></p>

+

+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>

+

+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS

+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR

+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY

+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING

+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF

+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF

+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>

+

+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>

+

+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid

+or unenforceable under applicable law, it shall not affect the validity or

+enforceability of the remainder of the terms of this Agreement, and without

+further action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.</span> </p>

+

+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation

+against any entity (including a cross-claim or counterclaim in a lawsuit)

+alleging that the Program itself (excluding combinations of the Program with

+other software or hardware) infringes such Recipient's patent(s), then such

+Recipient's rights granted under Section 2(b) shall terminate as of the date

+such litigation is filed. </span></p>

+

+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement

+shall terminate if it fails to comply with any of the material terms or

+conditions of this Agreement and does not cure such failure in a reasonable

+period of time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use and

+distribution of the Program as soon as reasonably practicable. However,

+Recipient's obligations under this Agreement and any licenses granted by

+Recipient relating to the Program shall continue and survive. </span></p>

+

+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute

+copies of this Agreement, but in order to avoid inconsistency the Agreement is

+copyrighted and may only be modified in the following manner. The Agreement

+Steward reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement Steward has

+the right to modify this Agreement. The Eclipse Foundation is the initial

+Agreement Steward. The Eclipse Foundation may assign the responsibility to

+serve as the Agreement Steward to a suitable separate entity. Each new version

+of the Agreement will be given a distinguishing version number. The Program

+(including Contributions) may always be distributed subject to the version of

+the Agreement under which it was received. In addition, after a new version of

+the Agreement is published, Contributor may elect to distribute the Program

+(including its Contributions) under the new version. Except as expressly stated

+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to

+the intellectual property of any Contributor under this Agreement, whether

+expressly, by implication, estoppel or otherwise. All rights in the Program not

+expressly granted under this Agreement are reserved.</span> </p>

+

+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the

+State of New York and the intellectual property laws of the United States of

+America. No party to this Agreement will bring a legal action under this

+Agreement more than one year after the cause of action arose. Each party waives

+its rights to a jury trial in any resulting litigation.</span> </p>

+

+<p class=MsoNormal></p>

+

+</div>

+

+</body>

+

+</html>

diff --git a/features/org.eclipse.mylyn.docs.intent.tests-feature/rootfiles/notice.html b/features/org.eclipse.mylyn.docs.intent.tests-feature/rootfiles/notice.html
new file mode 100644
index 0000000..6930540
--- /dev/null
+++ b/features/org.eclipse.mylyn.docs.intent.tests-feature/rootfiles/notice.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

+<title>Eclipse Foundation Software User Agreement</title>

+</head>

+

+<body lang="EN-US">

+<h2>Eclipse Foundation Software User Agreement</h2>

+<p>April 14, 2010</p>

+

+<h3>Usage Of Content</h3>

+

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>

+

+<h3>Applicable Licenses</h3>

+

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

+

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>

+

+<ul>

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li>

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>

+</ul>

+

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p>

+

+<ul>

+       <li>The top-level (root) directory</li>

+       <li>Plug-in and Fragment directories</li>

+       <li>Inside Plug-ins and Fragments packaged as JARs</li>

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>

+       <li>Feature directories</li>

+</ul>

+

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p>

+

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>

+

+<ul>

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>

+</ul>

+

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>

+

+

+<h3>Use of Provisioning Technology</h3>

+

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>

+   (&quot;Specification&quot;).</p>

+

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>

+

+<ol>

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li>

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li>

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>

+</ol>

+

+<h3>Cryptography</h3>

+

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p>

+

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>

+</body>

+</html>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.checkstyle b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.checkstyle
new file mode 100644
index 0000000..bf5fe67
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.checkstyle
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fileset-config file-format-version="1.2.0" simple-config="true">
+    <local-check-config name="Intent" location="/org.eclipse.mylyn.docs.intent/style/checkstyleConfiguration.xml" type="project" description="">
+        <additional-data name="protect-config-file" value="false"/>
+    </local-check-config>
+    <fileset name="tous" enabled="true" check-config-name="Intent" local="true">
+        <file-match-pattern match-pattern="." include-pattern="true"/>
+    </fileset>
+</fileset-config>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.classpath b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.project b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.project
new file mode 100644
index 0000000..a7fc7e5
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.mylyn.docs.intent.client.compiler</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5e329eb
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Jun 16 16:53:45 CEST 2010

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/META-INF/MANIFEST.MF b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8fae8a9
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.mylyn.docs.intent.client.compiler
+Bundle-Version: 0.7.0.qualifier
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.emf.common;bundle-version="2.6.0",
+ org.eclipse.emf.ecore;bundle-version="2.6.0",
+ org.eclipse.mylyn.docs.intent.core,
+ org.eclipse.mylyn.docs.intent.collab,
+ org.eclipse.mylyn.docs.intent.collab.common,
+ org.eclipse.emf.compare.match;bundle-version="1.1.0",
+ org.eclipse.emf.compare;bundle-version="1.1.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: 
+ org.eclipse.mylyn.docs.intent.client.compiler,
+ org.eclipse.mylyn.docs.intent.client.compiler.launcher,
+ org.eclipse.mylyn.docs.intent.client.compiler.repositoryconnection
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/about.html b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/about.html
new file mode 100644
index 0000000..34ab520
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/about.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml"> 

+<head> 

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

+<title>Eclipse Foundation Software User Agreement</title> 

+</head> 

+ 

+<body lang="EN-US"> 

+<h2>Eclipse Foundation Software User Agreement</h2> 

+<p>April 14, 2010</p> 

+ 

+<h3>Usage Of Content</h3> 

+ 

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p> 

+ 

+<h3>Applicable Licenses</h3> 

+ 

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p> 

+ 

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p> 

+ 

+<ul> 

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li> 

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li> 

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li> 

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li> 

+</ul> 

+ 

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p> 

+ 

+<ul> 

+       <li>The top-level (root) directory</li> 

+       <li>Plug-in and Fragment directories</li> 

+       <li>Inside Plug-ins and Fragments packaged as JARs</li> 

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li> 

+       <li>Feature directories</li> 

+</ul> 

+ 

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p> 

+ 

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p> 

+ 

+<ul> 

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li> 

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li> 

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li> 

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li> 

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li> 

+</ul> 

+ 

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p> 

+ 

+ 

+<h3>Use of Provisioning Technology</h3> 

+ 

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a 

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a> 

+   (&quot;Specification&quot;).</p> 

+ 

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p> 

+ 

+<ol> 

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li> 

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li> 

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li> 

+</ol> 

+ 

+<h3>Cryptography</h3> 

+ 

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p> 

+ 

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p> 

+</body> 

+</html> 
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/build.properties b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/build.properties
new file mode 100644
index 0000000..6a10ff2
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/build.properties
@@ -0,0 +1,17 @@
+################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+################################################################################

+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               about.html,\

+               plugin.properties

+src.includes = about.html

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/plugin.properties b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/plugin.properties
new file mode 100644
index 0000000..fe24058
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/plugin.properties
@@ -0,0 +1,12 @@
+#################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+#################################################################################

+pluginName = Intent Compiler Client

+providerName = Eclipse Mylyn
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/ModelingUnitCompiler.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/ModelingUnitCompiler.java
new file mode 100644
index 0000000..25353ed
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/ModelingUnitCompiler.java
@@ -0,0 +1,317 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EcorePackage;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.AbstractRuntimeCompilationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationErrorType;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.InvalidReferenceException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.InvalidValueException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.PackageNotFoundResolveException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.PackageRegistrationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.ResolveException;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration.ModelingUnitGenerator;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration.StructuralFeatureGenerator;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.client.compiler.utils.IntentCompilerInformationHolder;

+import org.eclipse.mylyn.docs.intent.client.compiler.validator.GeneratedElementValidator;

+import org.eclipse.mylyn.docs.intent.core.compiler.UnresolvedContributionHolder;

+import org.eclipse.mylyn.docs.intent.core.compiler.UnresolvedReferenceHolder;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnit;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitInstructionReference;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+

+/**

+ * Modeling Unit Compiler : generate the elements described in modeling units and register those elements in

+ * an information Handler ; also in charged of handling compilation errors if the described models are

+ * incorrect.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class ModelingUnitCompiler {

+

+	/**

+	 * Compilation mode : compiling modeling units defining EPackages only.

+	 */

+	private static final boolean EPACKAGE_DECLARATION_ONLY = true;

+

+	/**

+	 * Compilation mode : compiling all the other modeling units (mutual exclusion with the previous mode).

+	 */

+	private static final boolean ALL_MODELING_UNITS_EXCEPT_EPACKAGES_DECLARATION = false;

+

+	/**

+	 * The ModelingUnitGenerator used to generate the element described in one

+	 * org.eclipse.mylyn.docs.intent.core.modelingunit.

+	 */

+	private final ModelingUnitGenerator modelingUnitGenerator;

+

+	/**

+	 * The entity used to hold informations about compilation.

+	 */

+	private final IntentCompilerInformationHolder informationHolder;

+

+	/**

+	 * The linkResolver used to resolved the links in modelingUnits.

+	 */

+	private final ModelingUnitLinkResolver linkResolver;

+

+	/**

+	 * ModelingUnitCompiler constructor.

+	 * 

+	 * @param linkResolver

+	 *            the linkResolver used to resolved the links in modelingUnits

+	 * @param informationHolder

+	 *            the entity used to hold informations about compilation

+	 */

+	public ModelingUnitCompiler(ModelingUnitLinkResolver linkResolver,

+			IntentCompilerInformationHolder informationHolder) {

+

+		this.informationHolder = informationHolder;

+		this.modelingUnitGenerator = new ModelingUnitGenerator(linkResolver, informationHolder);

+		this.linkResolver = linkResolver;

+	}

+

+	/**

+	 * Compile the given modelingUnits, compiling EPackages declaration first, and then other elements.

+	 * 

+	 * @param modelingUnits

+	 *            the modeling units to compile

+	 * @return the informationHolder containing all the needed informations (generated elements, errors,

+	 *         mapping to resources).

+	 */

+	public IntentCompilerInformationHolder compile(List<ModelingUnit> modelingUnits) {

+

+		// Step 0 : initialization of the information Holder

+		informationHolder.initialize();

+

+		// Step 1 : compiling modeling units defining EPackages

+		compileAllWithMode(modelingUnits, EPACKAGE_DECLARATION_ONLY);

+

+		// Step 2 : compiling all the other modeling units

+		compileAllWithMode(modelingUnits, ALL_MODELING_UNITS_EXCEPT_EPACKAGES_DECLARATION);

+

+		// Step 3 : handle the unresolved contribution instructions

+		for (String unresolvedName : informationHolder.getAllUnresolvedContributionsNames()) {

+			// For each contribution instruction, we generate a compilationStatus

+			for (UnresolvedContributionHolder unresolvedContributionHolder : informationHolder

+					.getUnresolvedContributions(unresolvedName)) {

+				if (!unresolvedContributionHolder.isResolved()) {

+					informationHolder

+							.registerCompilationExceptionAsCompilationStatus(new CompilationException(

+									unresolvedContributionHolder.getReferencedContribution(),

+									CompilationErrorType.INVALID_REFRENCE_ERROR,

+									"The element "

+											+ unresolvedName

+											+ " cannot be resolved. This contribution instruction will be ignored. "));

+				}

+			}

+		}

+		return IntentCompilerInformationHolder.getInstance();

+	}

+

+	/**

+	 * Compile the given modeling units and register the generated objects into the informationHolder.

+	 * 

+	 * @param modelingUnits

+	 *            the modelingUnits to compile

+	 * @param generateOnlyEPackages

+	 *            indicates if we only consider EPackages

+	 */

+	protected void compileAllWithMode(List<ModelingUnit> modelingUnits, boolean generateOnlyEPackages) {

+		// Step 1 : initialization.

+

+		// modelingUnitGenerator.clearResourceDeclarations();

+

+		// Step 2.1 : Compilation of each org.eclipse.mylyn.docs.intent.core.modelingunit contained in the

+		// list

+		// (without resolving links)

+		for (ModelingUnit modelingUnitToCompile : modelingUnits) {

+			this.compileModelingUnit(modelingUnitToCompile, generateOnlyEPackages);

+		}

+

+		// Step 2.3 : link Resolving

+		resolveLinks();

+

+		// Step 2.4 : we associate each generated object in the given resource

+		mapResourceDeclarationToGeneratedObjects();

+

+		// Step 2.5 : Validation

+		validateGeneratedElement();

+

+		// TODO Handle compilation Time.

+

+	}

+

+	/**

+	 * Maps the resource declarations detected by the generator to the generatedElements ; if invalid

+	 * reference are found, register those errors as compilationStatus.

+	 */

+	protected void mapResourceDeclarationToGeneratedObjects() {

+

+		// For each declared resource

+		List<ResourceDeclaration> resourcesDeclarations = modelingUnitGenerator.getResourceDeclarations();

+		for (ResourceDeclaration resource : resourcesDeclarations) {

+			// For each reference to a generated Object

+			for (ModelingUnitInstructionReference newContainedElementRefrence : resource.getContent()) {

+				// We resolve this reference

+				try {

+					EObject newContainedElement = linkResolver.resolveReferenceinElementList(resource, null,

+							newContainedElementRefrence.getIntentHref());

+					// and add it to the resource mapping of the informationHolder

+					informationHolder.addResourceToGeneratedElementMapping(resource, newContainedElement);

+				} catch (InvalidReferenceException e) {

+					// If the reference cannot be resolved, we register a new compilation status.

+					informationHolder

+							.registerCompilationExceptionAsCompilationStatus(new CompilationException(

+									resource, CompilationErrorType.INVALID_REFRENCE_ERROR, e.getMessage()));

+				}

+			}

+		}

+

+	}

+

+	/**

+	 * Generates and return the elements described in the given modeling Unit, and register errors in the

+	 * described model as compilationStatus.

+	 * 

+	 * @param modelingUnitToCompile

+	 *            the modeling Unit to inspect

+	 * @param generateOnlyEPackages

+	 *            indicates if we only consider EPackages

+	 * @return a list containing the elements described in the given modeling Unit

+	 */

+	protected List<EObject> compileModelingUnit(ModelingUnit modelingUnitToCompile,

+			boolean generateOnlyEPackages) {

+

+		List<EObject> generatedObjects = new ArrayList<EObject>();

+		AbstractRuntimeCompilationException thrownException = null;

+		CompilationErrorType compilationErrorType = null;

+		informationHolder.setCurrentImportedPackages(getImportedPackages(modelingUnitToCompile,

+				generateOnlyEPackages));

+

+		try {

+			modelingUnitGenerator.setGenerateOnlyEPackages(generateOnlyEPackages);

+			modelingUnitGenerator.generate(modelingUnitToCompile);

+			return generatedObjects;

+		} catch (ResolveException e) {

+			thrownException = e;

+		} catch (PackageNotFoundResolveException e) {

+			thrownException = e;

+			compilationErrorType = CompilationErrorType.PACKAGE_NOT_FOUND_ERROR;

+		} catch (PackageRegistrationException e) {

+			thrownException = e;

+			compilationErrorType = CompilationErrorType.PACKAGE_REGISTRATION_ERROR;

+		} catch (InvalidReferenceException e) {

+			thrownException = e;

+			compilationErrorType = CompilationErrorType.INVALID_REFRENCE_ERROR;

+		} catch (InvalidValueException e) {

+			thrownException = e;

+			compilationErrorType = CompilationErrorType.INVALID_VALUE_ERROR;

+		}

+		CompilationException compilationException = new CompilationException(

+				thrownException.getInvalidInstruction(), compilationErrorType, thrownException.getMessage());

+		compilationException.setStackTrace(thrownException.getStackTrace());

+

+		return generatedObjects;

+	}

+

+	/**

+	 * Returns the packages imported by the given modelingUnit.

+	 * 

+	 * @param modelingUnitToCompile

+	 *            the modelingUnit to inspect

+	 * @param generateOnlyEPackages

+	 * @return the packages imported by the given modelingUnit

+	 */

+	@Deprecated

+	protected List<String> getImportedPackages(ModelingUnit modelingUnitToCompile,

+			boolean generateOnlyEPackages) {

+		// TODO Once we'll have handled Headers parsing, use this header to get imported packages

+		List<String> importedPackages = new ArrayList<String>();

+		importedPackages.add(EcorePackage.eINSTANCE.getNsURI());

+		if (!generateOnlyEPackages) {

+			// FIXME register valid URI:	importedPackages.add("http://Extlibrary/1.0.0");

+		}

+		return importedPackages;

+	}

+

+	/**

+	 * Resolves the unresolvedReference (registered in the InformationHolder) using a linkResolver.

+	 * 

+	 * @param generatedObjects

+	 */

+	protected void resolveLinks() {

+

+		for (EObject elementContainingUnresolvedReference : informationHolder.getCurrentCreatedElements()) {

+			for (UnresolvedReferenceHolder referenceHolder : informationHolder

+					.getUnresolvedReferencesByGeneratedElement(elementContainingUnresolvedReference)) {

+

+				// This list will contains the resolved value of the reference

+				List<Object> referenceValue = new ArrayList<Object>();

+				try {

+					try {

+

+						EObject referencedElement = linkResolver.resolveReferenceinElementList(

+								referenceHolder.getInstructionContainer(),

+								// should be referenceHolder.getConcernedFeature().eClass()

+								null, referenceHolder.getTextualReference());

+						referenceValue.add(referencedElement);

+

+					} catch (InvalidReferenceException e) {

+						// If the link to resolve is not an instance,

+						// we can use the imported package to resolve it

+						referenceValue.add(linkResolver.resolveEClassifierUsingPackage(

+								referenceHolder.getInstructionContainer(),

+								informationHolder.getCurrentImportedPackages(),

+								referenceHolder.getTextualReference()));

+					}

+

+					StructuralFeatureGenerator.setFeatureValueInElement(elementContainingUnresolvedReference,

+							referenceHolder.getConcernedFeature(), referenceValue);

+				} catch (ResolveException e) {

+					// If the reference cannot be resolved with both ways

+					// we register a compilation status

+					informationHolder

+							.registerCompilationExceptionAsCompilationStatus(new CompilationException(e

+									.getInvalidInstruction(), CompilationErrorType.INVALID_REFRENCE_ERROR, e

+									.getMessage()));

+				}

+			}

+		}

+	}

+

+	/**

+	 * Validate the generated Elements and create a Compilation Status if the generation Failed.

+	 */

+	protected void validateGeneratedElement() {

+

+		for (EObject generatedElement : informationHolder.getCurrentCreatedElements()) {

+			GeneratedElementValidator validator = new GeneratedElementValidator(

+					informationHolder.getInstructionByCreatedElement(generatedElement), generatedElement);

+			Diagnostic diagnostic;

+			try {

+				diagnostic = validator.validate();

+

+				informationHolder.registerDiagnosticAsCompilationStatusList(generatedElement, diagnostic);

+			} catch (CompilationException e) {

+				informationHolder.registerCompilationExceptionAsCompilationStatus(e);

+			}

+		}

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/AbstractRuntimeCompilationException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/AbstractRuntimeCompilationException.java
new file mode 100644
index 0000000..c57ac7a
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/AbstractRuntimeCompilationException.java
@@ -0,0 +1,55 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Represents any exception that may have occured during the compilation ; must be catch by the Compilator to

+ * construct a CompilationException.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class AbstractRuntimeCompilationException extends RuntimeException {

+

+	/**

+	 * Generated serial Version UID.

+	 */

+	private static final long serialVersionUID = 1643021584619533025L;

+

+	/**

+	 * The instruction that caused the error.

+	 */

+	private final UnitInstruction invalidInstruction;

+

+	/**

+	 * AbstractRuntimeCompilationException constructor.

+	 * 

+	 * @param instruction

+	 *            the instruction that caused the error

+	 * @param message

+	 *            the message explaining the cause of the error

+	 */

+	public AbstractRuntimeCompilationException(UnitInstruction instruction, String message) {

+		super(message);

+		this.invalidInstruction = instruction;

+	}

+

+	/**

+	 * Returns the instruction that caused the error.

+	 * 

+	 * @return the invalidInstruction the instruction that caused the error

+	 */

+	public UnitInstruction getInvalidInstruction() {

+		return invalidInstruction;

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/CompilationErrorType.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/CompilationErrorType.java
new file mode 100644
index 0000000..e516d9f
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/CompilationErrorType.java
@@ -0,0 +1,45 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+/**

+ * Enumerate all the compilationError types that may be encountered while compiling.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public enum CompilationErrorType {

+

+	/**

+	 * Indicates an error while resolving links (for example if trying to instantiate a inexistent EClass).

+	 */

+	RESOLVE_ERROR,

+	/**

+	 * Indicates an error that occurred while trying to find an EPackage in the package registry.

+	 */

+	PACKAGE_NOT_FOUND_ERROR,

+	/**

+	 * Indicates an error that occurred while trying to register an EPackage in the package registry.

+	 */

+	PACKAGE_REGISTRATION_ERROR,

+	/**

+	 * Indicates an error that occurred when failing to resolve a reference to a created instance.

+	 */

+	INVALID_REFRENCE_ERROR,

+	/**

+	 * Indicates an error that occurred when failing to validate a generated element.

+	 */

+	VALIDATION_ERROR,

+	/**

+	 * Exception that occurred when failing to convert a value in a NativeValueForStructuralFeature

+	 * instruction.

+	 */

+	INVALID_VALUE_ERROR;

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/CompilationException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/CompilationException.java
new file mode 100644
index 0000000..ea2e354
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/CompilationException.java
@@ -0,0 +1,70 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Exception raised while an error occured during compilation.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class CompilationException extends Exception {

+

+	/**

+	 * Generated serial version UID.

+	 */

+	private static final long serialVersionUID = 5836382350297708295L;

+

+	/**

+	 * The instruction that caused the error.

+	 */

+	private final UnitInstruction invalidInstruction;

+

+	/**

+	 * Type of this compilation error.

+	 */

+	private final CompilationErrorType type;

+

+	/**

+	 * Default constructor.

+	 * 

+	 * @param instruction

+	 *            the instruction that caused the error

+	 * @param type

+	 *            Type of this compilation error

+	 * @param message

+	 *            message explaining the cause of the error

+	 */

+	public CompilationException(UnitInstruction instruction, CompilationErrorType type, String message) {

+		super(message);

+		this.invalidInstruction = instruction;

+		this.type = type;

+	}

+

+	/**

+	 * Returns the instruction that caused the error.

+	 * 

+	 * @return invalidInstruction the instruction that caused the error

+	 */

+	public UnitInstruction getInvalidInstruction() {

+		return invalidInstruction;

+	}

+

+	/**

+	 * Returns the type of this compilation error.

+	 * 

+	 * @return the type of this compilation error

+	 */

+	public CompilationErrorType getType() {

+		return type;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/InvalidReferenceException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/InvalidReferenceException.java
new file mode 100644
index 0000000..f55e172
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/InvalidReferenceException.java
@@ -0,0 +1,38 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Exception that occurred when failing to resolve a reference to a created instance.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class InvalidReferenceException extends AbstractRuntimeCompilationException {

+

+	/**

+	 * Generated serial version UID.

+	 */

+	private static final long serialVersionUID = -1996338680173671147L;

+

+	/**

+	 * ResolveException constructor.

+	 * 

+	 * @param message

+	 *            the message explaining the cause of the error

+	 * @param instruction

+	 *            the instruction that caused the error

+	 */

+	public InvalidReferenceException(UnitInstruction instruction, String message) {

+		super(instruction, message);

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/InvalidValueException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/InvalidValueException.java
new file mode 100644
index 0000000..d74014c
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/InvalidValueException.java
@@ -0,0 +1,38 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Exception that occurred when failing to convert a value in a NativeValueForStructuralFeature instruction.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class InvalidValueException extends AbstractRuntimeCompilationException {

+

+	/**

+	 * Generated serial version UID.

+	 */

+	private static final long serialVersionUID = -2091330258411885861L;

+

+	/**

+	 * InvalidValueException constructor.

+	 * 

+	 * @param instruction

+	 *            the instruction that caused the error

+	 * @param message

+	 *            the message explaining the cause of the error

+	 */

+	public InvalidValueException(UnitInstruction instruction, String message) {

+		super(instruction, message);

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/PackageNotFoundResolveException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/PackageNotFoundResolveException.java
new file mode 100644
index 0000000..5fb4524
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/PackageNotFoundResolveException.java
@@ -0,0 +1,38 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Exception that occurred when failing to find an EPackage in the package registry.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class PackageNotFoundResolveException extends AbstractRuntimeCompilationException {

+

+	/**

+	 * Generated serial version UID.

+	 */

+	private static final long serialVersionUID = -1996338680173671147L;

+

+	/**

+	 * ResolveException constructor.

+	 * 

+	 * @param message

+	 *            the message explaining the cause of the error

+	 * @param invalidInstruction

+	 *            the instruction that caused the error

+	 */

+	public PackageNotFoundResolveException(UnitInstruction invalidInstruction, String message) {

+		super(invalidInstruction, message);

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/PackageRegistrationException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/PackageRegistrationException.java
new file mode 100644
index 0000000..5c8edc9
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/PackageRegistrationException.java
@@ -0,0 +1,38 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Exception that occurred when failing to register an EPackage in the package registry.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class PackageRegistrationException extends AbstractRuntimeCompilationException {

+

+	/**

+	 * Generated serial version UID.

+	 */

+	private static final long serialVersionUID = -1573067736230038238L;

+

+	/**

+	 * ResolveException constructor.

+	 * 

+	 * @param message

+	 *            the message explaining the cause of the error

+	 * @param instruction

+	 *            the instruction that caused the error

+	 */

+	public PackageRegistrationException(UnitInstruction instruction, String message) {

+		super(instruction, message);

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/ResolveException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/ResolveException.java
new file mode 100644
index 0000000..f5ed4a6
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/ResolveException.java
@@ -0,0 +1,38 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Exception that occurred when failing to resolve a textual eference.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class ResolveException extends AbstractRuntimeCompilationException {

+

+	/**

+	 * Generated serial version UID.

+	 */

+	private static final long serialVersionUID = -1996338680173671147L;

+

+	/**

+	 * ResolveException constructor.

+	 * 

+	 * @param message

+	 *            the message explaining the cause of the error

+	 * @param instruction

+	 *            the instruction that caused the error

+	 */

+	public ResolveException(UnitInstruction instruction, String message) {

+		super(instruction, message);

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/ValidationException.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/ValidationException.java
new file mode 100644
index 0000000..2f2b968
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/errors/ValidationException.java
@@ -0,0 +1,58 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.errors;

+

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Exception that occurred when failing to validate a generated element.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class ValidationException extends CompilationException {

+

+	/**

+	 * Generated serial version UID.

+	 */

+	private static final long serialVersionUID = -1996338680173671147L;

+

+	/**

+	 * ResolveException constructor.

+	 * 

+	 * @param instruction

+	 *            the instruction that caused the error

+	 * @param message

+	 *            the message explaining the cause of the error

+	 * @param elementToValidate

+	 */

+	public ValidationException(UnitInstruction instruction, String message) {

+		super(instruction, CompilationErrorType.VALIDATION_ERROR, message);

+	}

+

+	/**

+	 * Returns a textual error message constructed with an elementToValidate and the associated diagnostic.

+	 * 

+	 * @param elementToValidate

+	 *            the element to use for creating the error message

+	 * @param diagnostic

+	 *            the diagnostic to use for creating the error message

+	 * @return a textual error message constructed with an elementToValidate and the associated diagnostic

+	 */

+	public static String getErrorMessageFrom(EObject elementToValidate, Diagnostic diagnostic) {

+		String errorMessage = "";

+		for (Diagnostic subDiagnostic : diagnostic.getChildren()) {

+			errorMessage += "-" + subDiagnostic.getMessage() + "\n";

+		}

+		return errorMessage;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ContributionInstructionGenerator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ContributionInstructionGenerator.java
new file mode 100644
index 0000000..6898c01
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ContributionInstructionGenerator.java
@@ -0,0 +1,85 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.InvalidReferenceException;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.StructuralFeatureAffectation;

+

+/**

+ * Returns the value described by the given {@link ContributionInstruction} instruction.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class ContributionInstructionGenerator {

+

+	/**

+	 * ContributionInstructionGenerator constructor.

+	 */

+	private ContributionInstructionGenerator() {

+

+	}

+

+	/**

+	 * Generates the object described in the given ContributionInstruction.

+	 * 

+	 * @param contributionInstruction

+	 *            the ContributionInstruction instruction to inspect

+	 * @param linkResolver

+	 *            the entity used in order to resolve links

+	 * @param modelingUnitGenerator

+	 *            the dispatcher to use for calling the correct generator on sub-elements

+	 */

+	public static void generate(ContributionInstruction contributionInstruction,

+			ModelingUnitGenerator modelingUnitGenerator, ModelingUnitLinkResolver linkResolver) {

+

+		ModelingUnitGenerator.clearCompilationStatus(contributionInstruction);

+

+		String instanceTextualReference = contributionInstruction.getReferencedElement().getIntentHref();

+

+		// If this contribution has already been generated during previous step, we do nothing

+		if (modelingUnitGenerator.getInformationHolder().isUnresolvedContribution(contributionInstruction)) {

+

+			try {

+				// If this contribution can be resolved

+				EObject referencedElement = linkResolver.resolveReferenceinElementList(

+						contributionInstruction, null, instanceTextualReference);

+

+				// We contribute to the generated element.

+				for (ModelingUnitInstruction instruction : contributionInstruction.getContributions()) {

+					if (instruction instanceof StructuralFeatureAffectation) {

+						StructuralFeatureGenerator.generateFeatureAndAddToClass(

+								(StructuralFeatureAffectation)instruction, referencedElement, linkResolver,

+								modelingUnitGenerator);

+					}

+				}

+

+				// We add this contribution to the unresolvedcontribution list and set it as resolved

+				modelingUnitGenerator.getInformationHolder().addUnresolvedContribution(

+						instanceTextualReference, contributionInstruction);

+

+				modelingUnitGenerator.getInformationHolder().setContributionInstructionAsResolved(

+						contributionInstruction);

+

+			} catch (InvalidReferenceException e) {

+				// here the referenced element has not been generated yet

+				// We register this contribution as unresolved

+				modelingUnitGenerator.getInformationHolder().addUnresolvedContribution(

+						instanceTextualReference, contributionInstruction);

+

+			}

+		}

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/InstanciationInstructionGenerator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/InstanciationInstructionGenerator.java
new file mode 100644
index 0000000..e858579
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/InstanciationInstructionGenerator.java
@@ -0,0 +1,166 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration;

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EcoreFactory;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationErrorType;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.ResolveException;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.core.compiler.UnresolvedContributionHolder;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.InstanciationInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.StructuralFeatureAffectation;

+

+/**

+ * Generates objects described by an Intent InstanciationInstruction.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class InstanciationInstructionGenerator {

+

+	/**

+	 * InstanciationInstructionGenerator constructor.

+	 */

+	private InstanciationInstructionGenerator() {

+

+	}

+

+	/**

+	 * Generates the object described in the given instanciationInstruction.

+	 * 

+	 * @param instanciationInstruction

+	 *            the instantiation instruction to inspect

+	 * @param importedPackageURIS

+	 *            the URIs corresponding to all the packages imported in this ModelingUnit

+	 * @param linkResolver

+	 *            the entity used in order to resolve links

+	 * @param modelingUnitGenerator

+	 *            the dispatcher to use for calling the correct generator on sub-elements

+	 * @return the object described in the given instanciationInstruction

+	 */

+	public static EObject generate(InstanciationInstruction instanciationInstruction,

+			List<String> importedPackageURIS, ModelingUnitLinkResolver linkResolver,

+			ModelingUnitGenerator modelingUnitGenerator) {

+

+		ModelingUnitGenerator.clearCompilationStatus(instanciationInstruction);

+

+		EObject createdElement = null;

+		// Step 1 : resolving the link to the metaType (thanks to the linkResolver)

+		String metaTypeHref = instanciationInstruction.getMetaType().getIntentHref();

+		try {

+			EClass metaType = (EClass)linkResolver.resolveEClassifierUsingPackage(instanciationInstruction,

+					importedPackageURIS, metaTypeHref);

+

+			// Step 2 : instantiate correctly this entity

+			// Step 2.1 : Creation using the factory

+			createdElement = metaType.getEPackage().getEFactoryInstance().create(metaType);

+

+			// Step 2.2 : If a name has been associated to this instance

+			if (instanciationInstruction.getName() != null) {

+				// We determine if this name can be assigned to any attribute

+				for (EAttribute attribute : metaType.getEAllAttributes()) {

+					if (isConcernedByNameAttribute(attribute)) {

+						// if so, we set this attribute

+						createdElement.eSet(attribute, instanciationInstruction.getName());

+					}

+				}

+			}

+			// Step 2.3 : We set all the structuralFeatureAffectation associated to this instance

+			// leaving the other attributes to default values.

+			for (StructuralFeatureAffectation sfa : instanciationInstruction.getStructuralFeatures()) {

+				StructuralFeatureGenerator.generateFeatureAndAddToClass(sfa, createdElement, linkResolver,

+						modelingUnitGenerator);

+			}

+		} catch (ResolveException e) {

+			// If the metaType of the element to generate cannot be resolved

+			// We generate a compilation status

+			modelingUnitGenerator.getInformationHolder().registerCompilationExceptionAsCompilationStatus(

+					new CompilationException(e.getInvalidInstruction(),

+							CompilationErrorType.INVALID_REFRENCE_ERROR, e.getMessage()));

+			// And we create a sample object, in order to let the compilation running

+			createdElement = EcoreFactory.eINSTANCE.createEObject();

+		}

+

+		// Step 3 : Registration of the generated element

+		// Step 3.1 : We register the generated element to the package registry (if it's an EPackage)

+		registerGeneratedElementsInPackageRegistry(instanciationInstruction, linkResolver, createdElement);

+

+		// Step 3.2 : we add the generated element in the current created Elements list

+		modelingUnitGenerator.getInformationHolder().addNameToCreatedElementEntry(

+				instanciationInstruction.getName(), createdElement, instanciationInstruction);

+

+		// Step 3.3 : if any unresolved contribution instructions were contributed to this element

+		// We resolve these contributions

+

+		for (final UnresolvedContributionHolder contributionHolder : modelingUnitGenerator

+				.getInformationHolder().getContributionsAssociatedTo(instanciationInstruction.getName())) {

+			ContributionInstructionGenerator.generate(contributionHolder.getReferencedContribution(),

+					modelingUnitGenerator, linkResolver);

+		}

+

+		return createdElement;

+	}

+

+	/**

+	 * Register the generated element if it's necessary (typically if it's an ePackage).

+	 * 

+	 * @param linkResolver

+	 *            the entity used in order to resolve links

+	 * @param generatedElement

+	 *            the generated element to register (if necessary)

+	 * @param instruction

+	 *            the instruction that need to register the generated element

+	 */

+	private static void registerGeneratedElementsInPackageRegistry(UnitInstruction instruction,

+			ModelingUnitLinkResolver linkResolver, EObject generatedElement) {

+		if (generatedElement instanceof EPackage) {

+			linkResolver.registerInPackageRegistry(instruction, (EPackage)generatedElement);

+		}

+	}

+

+	/**

+	 * Returns true if we can set the given attribute with a "name" feature of an instanciationInstruction.

+	 * 

+	 * @param attribute

+	 *            the attribute to inspect

+	 * @return true if the given attribute is of type EString and is named 'name' or is an ID attribute

+	 */

+	private static boolean isConcernedByNameAttribute(EAttribute attribute) {

+

+		// Case 1 : true if the attribute is defined as ID and is of type EString

+		boolean isConcernedByNameAttribute = attribute.isID()

+				&& ("EString".equals(attribute.getEAttributeType().getName()));

+

+		// Case 2 : true if the attribute's name is "name" and is of type EString

+		isConcernedByNameAttribute = isConcernedByNameAttribute

+				|| ("name".equals(attribute.getName()) && ("EString".equals(attribute.getEAttributeType()

+						.getName())));

+		return isConcernedByNameAttribute;

+	}

+

+	/**

+	 * Returns true if the given Instantiation instruction instantiates an EPackage.

+	 * 

+	 * @param instruction

+	 *            the InstantiationInstruction to consider.

+	 * @return true if the given Instantiation instruction instantiates an EPackage, false otherwise

+	 */

+	public static boolean isEPackageInstanciation(InstanciationInstruction instruction) {

+		return "EPackage".equals(instruction.getMetaType().getIntentHref());

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ModelingUnitGenerator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ModelingUnitGenerator.java
new file mode 100644
index 0000000..3e21d4e
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ModelingUnitGenerator.java
@@ -0,0 +1,350 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration;

+

+import java.util.ArrayList;

+import java.util.Iterator;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EcorePackage;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationErrorType;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.InvalidValueException;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.client.compiler.utils.IntentCompilerInformationHolder;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;

+import org.eclipse.mylyn.docs.intent.core.genericunit.LabelDeclaration;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.AnnotationDeclaration;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.InstanciationInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.IntentSectionReferenceinModelingUnit;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnit;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.NativeValueForStructuralFeature;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.NewObjectValueForStructuralFeature;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ReferenceValueForStructuralFeature;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch;

+

+/**

+ * Modeling Unit generator : generates, for the given Modeling Units, the elements described and register the

+ * generated elements into an informationHolder.<br/>

+ * This dispatcher calls the correct generator according to the elements types (typical use of EMF Switch).

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class ModelingUnitGenerator extends ModelingUnitSwitch<List<Object>> {

+

+	/**

+	 * The linkResolver to use for link resolving.

+	 */

+	private ModelingUnitLinkResolver linkResolver;

+

+	/**

+	 * List of the current imported packages (URIs).

+	 */

+	private List<String> currentImportedPackages;

+

+	/**

+	 * List of the Intent resources declared in the compiled modelingUnits.

+	 */

+	private List<ResourceDeclaration> resourceDeclarations;

+

+	/**

+	 * Indicates the mode of the generator : if true, the generator will only consider modeling Units defining

+	 * at least one EPackage ; if false, it will consider the other modeling units ONLY.

+	 */

+	private boolean generateOnlyEPackages;

+

+	/**

+	 * The information holder to use for register the generated elements.

+	 */

+	private IntentCompilerInformationHolder informationHolder;

+

+	/**

+	 * ModelingUnitGenerator constructor.

+	 * 

+	 * @param linkResolver

+	 *            the linkResolver to use for resolving links

+	 * @param informationHolder

+	 *            the information holder to use for register the generated elements.

+	 */

+	public ModelingUnitGenerator(ModelingUnitLinkResolver linkResolver,

+			IntentCompilerInformationHolder informationHolder) {

+		this.linkResolver = linkResolver;

+		this.resourceDeclarations = new ArrayList<ResourceDeclaration>();

+		this.generateOnlyEPackages = false;

+		this.informationHolder = informationHolder;

+	}

+

+	/**

+	 * Generate all the elements described in the given modeling unit, and register those generated elements

+	 * into the informationHolder.

+	 * 

+	 * @param mu

+	 *            the modeling unit to compile

+	 */

+	public void generate(ModelingUnit mu) {

+		this.doSwitch(mu);

+	}

+

+	/**

+	 * Returns the list of the Intent resources declared in the compiled modelingUnits.

+	 * 

+	 * @return the resourceDeclarations the list of the Intent resources declared in the compiled modelingUnits

+	 */

+	public List<ResourceDeclaration> getResourceDeclarations() {

+		return resourceDeclarations;

+	}

+

+	/**

+	 * Remove from the status list of the given ReStrucutred models element all the status related to

+	 * compilation errors.

+	 * 

+	 * @param element

+	 *            the element containing the compilation status to remove

+	 */

+	public static void clearCompilationStatus(IntentGenericElement element) {

+		Iterator<CompilationStatus> iterator = element.getCompilationStatus().iterator();

+		while (iterator.hasNext()) {

+			CompilationStatus status = iterator.next();

+			iterator.remove();

+		}

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseModelingUnit(org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnit)

+	 */

+	@Override

+	public List<Object> caseModelingUnit(ModelingUnit modelingUnit) {

+

+		List<Object> createdObject = new ArrayList<Object>();

+		// If we have to consider this org.eclipse.mylyn.docs.intent.core.modelingunit

+		if (isModelingUnitToConsider(modelingUnit)) {

+			// We generate the elements (in other cases we simply do nothing)

+			currentImportedPackages = getImportedPackages(modelingUnit);

+			for (UnitInstruction instruction : modelingUnit.getInstructions()) {

+				doSwitch(instruction);

+			}

+		}

+		return createdObject;

+	}

+

+	/**

+	 * Returns true if the given org.eclipse.mylyn.docs.intent.core.modelingunit must be considered,

+	 * according to the mode of the generator (generate only EPackages declarations mode or not).

+	 * 

+	 * @param modelingUnit

+	 *            the modeling unit to consider

+	 * @return true if the given org.eclipse.mylyn.docs.intent.core.modelingunit must be considered, false

+	 *         otherwise

+	 */

+	private boolean isModelingUnitToConsider(ModelingUnit modelingUnit) {

+		// If we are in generateOnlyEPackage mode, we consider this modelingunit

+		// only if it is describing at least one EPackage

+		// or is a contribution instruction

+		boolean isModelingUnitToConsider = isGenerateOnlyEPackages() && isDescribingEPackages(modelingUnit);

+		// Otherwise, it must define no EPackage at all

+		isModelingUnitToConsider = isModelingUnitToConsider

+				|| (!isGenerateOnlyEPackages() && !isDescribingEPackages(modelingUnit));

+		return isModelingUnitToConsider;

+	}

+

+	/**

+	 * Returns true if the given modeling Unit instantiate at least one EPackage.

+	 * 

+	 * @param modelingUnit

+	 *            the modeling unit to consider

+	 * @return true if the given modeling Unit instantiate at least one EPackage or contain a contribution

+	 *         instruction, false otherwise

+	 */

+	private boolean isDescribingEPackages(ModelingUnit modelingUnit) {

+		boolean isDescribingEPackages = false;

+

+		for (UnitInstruction instruction : modelingUnit.getInstructions()) {

+

+			// At least one instruction must match an EPackage instanciation

+			if (instruction instanceof InstanciationInstruction) {

+				isDescribingEPackages = isDescribingEPackages

+						|| InstanciationInstructionGenerator

+								.isEPackageInstanciation((InstanciationInstruction)instruction);

+			}

+

+			// or a completion (we can't know by advance if it's completing an EPackage

+			if (instruction instanceof ContributionInstruction) {

+				ContributionInstruction contributionInstruction = (ContributionInstruction)instruction;

+				// this.getInformationHolder().addUnresolvedContribution(

+				// contribution.getReferencedElement().getHref(), contribution);

+				// ContributionInstructionGenerator.generate(contribution, this, linkResolver, null);

+				// isDescribingEPackages = true;

+				ContributionInstructionGenerator.generate(contributionInstruction, this, linkResolver);

+			}

+		}

+		return isDescribingEPackages;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseInstanciationInstruction(org.eclipse.mylyn.docs.intent.core.modelingunit.InstanciationInstruction)

+	 */

+	@Override

+	public List<Object> caseInstanciationInstruction(InstanciationInstruction instanciationInstruction) {

+		List<Object> createdObject = new ArrayList<Object>();

+		createdObject.add(InstanciationInstructionGenerator.generate(instanciationInstruction,

+				currentImportedPackages, linkResolver, this));

+		return createdObject;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseContributionInstruction(org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction)

+	 */

+	@Override

+	public List<Object> caseContributionInstruction(ContributionInstruction contributionInstruction) {

+		List<Object> createdObject = new ArrayList<Object>();

+		// We simply do nothing, as

+		return createdObject;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseResourceDeclaration(org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration)

+	 */

+	@Override

+	public List<Object> caseResourceDeclaration(ResourceDeclaration resourceDeclaration) {

+		this.resourceDeclarations.add(resourceDeclaration);

+		return new ArrayList<Object>();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseNativeValueForStructuralFeature(org.eclipse.mylyn.docs.intent.core.modelingunit.NativeValueForStructuralFeature)

+	 */

+	@Override

+	public List<Object> caseNativeValueForStructuralFeature(NativeValueForStructuralFeature value) {

+		List<Object> createdObject = new ArrayList<Object>();

+		try {

+			createdObject.add(NativeValueForStructuralFeatureGenerator.generate(value, linkResolver, this));

+		} catch (InvalidValueException e) {

+			this.getInformationHolder().registerCompilationExceptionAsCompilationStatus(

+					new CompilationException(e.getInvalidInstruction(),

+							CompilationErrorType.INVALID_VALUE_ERROR, "The value " + e.getMessage()));

+		}

+		return createdObject;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseReferenceValueForStructuralFeature(org.eclipse.mylyn.docs.intent.core.modelingunit.ReferenceValueForStructuralFeature)

+	 */

+	@Override

+	public List<Object> caseReferenceValueForStructuralFeature(

+			ReferenceValueForStructuralFeature referenceValue) {

+		List<Object> createdObject = new ArrayList<Object>();

+

+		createdObject.add(ReferenceValueForStructuralFeatureGenerator.generate(referenceValue, linkResolver,

+				this));

+		return createdObject;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseNewObjectValueForStructuralFeature(org.eclipse.mylyn.docs.intent.core.modelingunit.NewObjectValueForStructuralFeature)

+	 */

+	@Override

+	public List<Object> caseNewObjectValueForStructuralFeature(NewObjectValueForStructuralFeature value) {

+		List<Object> createdObjects = new ArrayList<Object>();

+		createdObjects.addAll(doSwitch(value.getValue()));

+		return createdObjects;

+	}

+

+	/**

+	 * Sample method for stubing package declaration.

+	 * 

+	 * @return

+	 */

+	@Deprecated

+	public List<String> getImportedPackages(ModelingUnit mu) {

+		List<String> importedPackages = new ArrayList<String>();

+		importedPackages.add(EcorePackage.eINSTANCE.getNsURI());

+		return importedPackages;

+	}

+

+	/* IGNORED DECLARATIONS IN STEP ONE */

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseLabelDeclaration(org.eclipse.mylyn.docs.intent.core.genericunit.LabelDeclaration)

+	 */

+	@Override

+	public List<Object> caseLabelDeclaration(LabelDeclaration object) {

+		return new ArrayList<Object>();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseAnnotationDeclaration(org.eclipse.mylyn.docs.intent.core.modelingunit.AnnotationDeclaration)

+	 */

+	@Override

+	public List<Object> caseAnnotationDeclaration(AnnotationDeclaration object) {

+		return new ArrayList<Object>();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.core.modelingunit.util.ModelingUnitSwitch#caseSectionReferenceinModelingUnit(org.eclipse.mylyn.docs.intent.core.modelingunit.SectionReferenceinModelingUnit)

+	 */

+	@Override

+	public List<Object> caseIntentSectionReferenceinModelingUnit(IntentSectionReferenceinModelingUnit object) {

+		return new ArrayList<Object>();

+	}

+

+	/**

+	 * Sets the mode of this generator : if true, it will only consider ModelingUnits describing EPackages.

+	 * 

+	 * @param generateOnlyEPackages

+	 *            true if you want this generator to consider only ModelingUnits describing EPackages

+	 *            declarations, false if you want it to consider the other modeling units ONLY.

+	 */

+	public void setGenerateOnlyEPackages(boolean generateOnlyEPackages) {

+		this.generateOnlyEPackages = generateOnlyEPackages;

+	}

+

+	/**

+	 * Indicates if this generator will only consider ModelingUnits describing EPackages.

+	 * 

+	 * @return true if you want this generator considers only ModelingUnits describing EPackages declarations,

+	 *         false if it considers the other modeling units ONLY

+	 */

+	public boolean isGenerateOnlyEPackages() {

+		return generateOnlyEPackages;

+	}

+

+	/**

+	 * Returns the information holder to use for register the generated elements.

+	 * 

+	 * @return the information holder to use for register the generated elements

+	 */

+	public IntentCompilerInformationHolder getInformationHolder() {

+		return informationHolder;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/NativeValueForStructuralFeatureGenerator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/NativeValueForStructuralFeatureGenerator.java
new file mode 100644
index 0000000..e10ebba
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/NativeValueForStructuralFeatureGenerator.java
@@ -0,0 +1,164 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration;

+

+import org.eclipse.emf.ecore.EClassifier;

+import org.eclipse.emf.ecore.EEnum;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.InvalidValueException;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusSeverity;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.NativeValueForStructuralFeature;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.StructuralFeatureAffectation;

+

+/**

+ * Returns the value described by the given {@link NativeValueForStructuralFeatureGenerator} instruction.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class NativeValueForStructuralFeatureGenerator {

+

+	/**

+	 * ReferenceValueForStructuralFeatureGenerator constructor.

+	 */

+	private NativeValueForStructuralFeatureGenerator() {

+

+	}

+

+	/**

+	 * Generates the object described in the given NativeValueForStructuralFeature.

+	 * 

+	 * @param valueInstruction

+	 *            the NativeValueForStructuralFeatureGenerator instruction to inspect

+	 * @param linkResolver

+	 *            the entity used in order to resolve links

+	 * @param modelingUnitGenerator

+	 *            the dispatcher to use for calling the correct generator on sub-elements

+	 * @return the object described in the given instanciationInstruction

+	 */

+	public static Object generate(NativeValueForStructuralFeature valueInstruction,

+			ModelingUnitLinkResolver linkResolver, ModelingUnitGenerator modelingUnitGenerator) {

+

+		ModelingUnitGenerator.clearCompilationStatus(valueInstruction);

+

+		// We first get the type of the value to generate

+		String typeName = ((StructuralFeatureAffectation)valueInstruction.eContainer()).getMetaType()

+				.getIntentHref();

+

+		Object generatedValue = generateCorrectValueAccordingToType(valueInstruction, linkResolver, typeName);

+

+		if (generatedValue == null) {

+			throw new InvalidValueException(valueInstruction, "The value " + valueInstruction.getValue()

+					+ " is invalid for type " + typeName);

+		}

+		return generatedValue;

+	}

+

+	/**

+	 * Generates the value described in the given NativeValueForStructuralFeature instruction, according to

+	 * its type.

+	 * 

+	 * @param valueInstruction

+	 *            the valueInstruction describing the value to generate

+	 * @param linkResolver

+	 *            the linkResolver to use to determine the correct type of this value

+	 * @param typeName

+	 *            this value's type name

+	 * @return the value described in the given NativeValueForStructuralFeature instruction, or null if no

+	 *         value can be generated.

+	 */

+	private static Object generateCorrectValueAccordingToType(

+			NativeValueForStructuralFeature valueInstruction, ModelingUnitLinkResolver linkResolver,

+			String typeName) {

+		valueInstruction.getCompilationStatus().clear();

+		// According to this type, we generated the value differently

+		Object generatedValue = null;

+		try {

+			if ("EInt".equals(typeName)) {

+				generatedValue = generateEInt(valueInstruction.getValue());

+			}

+			if ("EString".equals(typeName)) {

+				generatedValue = generateEString(valueInstruction.getValue());

+			}

+			if ("EBoolean".equals(typeName)) {

+				generatedValue = generateEBoolean(valueInstruction.getValue());

+			}

+		} catch (NumberFormatException nfe) {

+			CompilationStatus status = CompilerFactory.eINSTANCE.createCompilationStatus();

+			status.setMessage("Invalid value for " + valueInstruction.getValue() + " : expecting " + typeName);

+			status.setSeverity(CompilationStatusSeverity.WARNING);

+			status.setTarget(valueInstruction);

+			status.setType(CompilationMessageType.INVALID_VALUE_ERROR);

+			valueInstruction.getCompilationStatus().add(status);

+		}

+

+		// Specific case of an EEnum value

+		if (generatedValue == null) {

+			// We first resolve the EEnum

+			EClassifier type = linkResolver

+					.resolveEClassifierUsingPackageRegistry(valueInstruction, typeName);

+			if (type instanceof EEnum) {

+				EEnum typeAsEnum = (EEnum)type;

+				// Then we call the specific methods of this EEnum to get the correct literal.

+				generatedValue = typeAsEnum

+						.getEEnumLiteralByLiteral(removeQuotes(valueInstruction.getValue()));

+			}

+		}

+		return generatedValue;

+	}

+

+	/**

+	 * Generate a String corresponding to the given value.

+	 * 

+	 * @param value

+	 *            the value to convert

+	 * @return a String corresponding to the given value

+	 */

+	private static Integer generateEInt(String value) {

+		return Integer.parseInt(removeQuotes(value));

+	}

+

+	/**

+	 * Generate a String corresponding to the given value.

+	 * 

+	 * @param value

+	 *            the value to convert

+	 * @return a String corresponding to the given value

+	 */

+	private static String generateEString(String value) {

+		return removeQuotes(value);

+	}

+

+	/**

+	 * Generate a Boolean corresponding to the given value.

+	 * 

+	 * @param value

+	 *            the value to convert

+	 * @return a Boolean corresponding to the given value

+	 */

+	private static Boolean generateEBoolean(String value) {

+		return Boolean.parseBoolean(removeQuotes(value));

+	}

+

+	/**

+	 * Returns a String corresponding to the given value from which we removed the quotes.

+	 * 

+	 * @param value

+	 *            the value to treat

+	 * @return a String corresponding to the given value from which we removed the quotes

+	 */

+	private static String removeQuotes(String value) {

+		return value.replace("\"", "");

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ReferenceValueForStructuralFeatureGenerator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ReferenceValueForStructuralFeatureGenerator.java
new file mode 100644
index 0000000..460d747
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/ReferenceValueForStructuralFeatureGenerator.java
@@ -0,0 +1,58 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.compiler.UnresolvedReferenceHolder;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ReferenceValueForStructuralFeature;

+

+/**

+ * Returns the value described by the given {@link ReferenceValueForStructuralFeature} instruction.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class ReferenceValueForStructuralFeatureGenerator {

+

+	/**

+	 * ReferenceValueForStructuralFeatureGenerator constructor.

+	 */

+	private ReferenceValueForStructuralFeatureGenerator() {

+

+	}

+

+	/**

+	 * Generates the object described in the given instanciationInstruction.

+	 * 

+	 * @param referenceValueInstruction

+	 *            the ReferenceValueForStructuralFeature instruction to inspect

+	 * @param linkResolver

+	 *            the entity used in order to resolve links

+	 * @param modelingUnitGenerator

+	 *            the dispatcher to use for calling the correct generator on sub-elements

+	 * @return the object described in the given instanciationInstruction

+	 */

+	public static EObject generate(ReferenceValueForStructuralFeature referenceValueInstruction,

+			ModelingUnitLinkResolver linkResolver, ModelingUnitGenerator modelingUnitGenerator) {

+

+		ModelingUnitGenerator.clearCompilationStatus(referenceValueInstruction);

+		// For now on, we simply return a stub value, as this reference

+		// will be resolved during the linking step

+		UnresolvedReferenceHolder referenceHolder = CompilerFactory.eINSTANCE

+				.createUnresolvedReferenceHolder();

+		referenceHolder.setTextualReference(referenceValueInstruction.getReferencedElement().getIntentHref());

+		referenceHolder.setInstructionContainer(referenceValueInstruction);

+

+		return referenceHolder;

+

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/StructuralFeatureGenerator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/StructuralFeatureGenerator.java
new file mode 100644
index 0000000..b9a18c2
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/StructuralFeatureGenerator.java
@@ -0,0 +1,181 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EReference;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationErrorType;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.ResolveException;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusSeverity;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.compiler.UnresolvedReferenceHolder;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitFactory;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.StructuralFeatureAffectation;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.TypeReference;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ValueForStructuralFeature;

+

+/**

+ * Associates the correct value to structural features described by a structural feature affectation.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class StructuralFeatureGenerator {

+

+	/**

+	 * StructuralFeatureGenerator constructor.

+	 */

+	private StructuralFeatureGenerator() {

+

+	}

+

+	/**

+	 * Generate the feature described in the given StructuralFeatureAffectation and assign its correct value.

+	 * 

+	 * @param affectation

+	 *            the structural affectation to inspect

+	 * @param eClass

+	 *            the object containing the described structural feature

+	 * @param linkResolver

+	 *            the linkResolver to use

+	 * @param modelingUnitGenerator

+	 *            the dispatcher to call for generating sub-elements

+	 */

+	public static void generateFeatureAndAddToClass(StructuralFeatureAffectation affectation, EObject eClass,

+			ModelingUnitLinkResolver linkResolver, ModelingUnitGenerator modelingUnitGenerator) {

+

+		ModelingUnitGenerator.clearCompilationStatus(affectation);

+		// Step 1 : resolve the feature reference

+

+		try {

+			EStructuralFeature feature = linkResolver.resolveEStructuralFeature(affectation, eClass.eClass());

+			TypeReference resolvedMetaType = ModelingUnitFactory.eINSTANCE.createTypeReference();

+			resolvedMetaType.setIntentHref(feature.getEType().getName());

+			affectation.setMetaType(resolvedMetaType);

+			if (!feature.isDerived()) {

+

+				// Step 2 : we get the values to generate and assign to this structural feature thanks to the

+				// modelingUnit generator.

+				List<Object> generatedValues = new ArrayList<Object>();

+				for (ValueForStructuralFeature value : affectation.getValues()) {

+					for (Object generatedValue : modelingUnitGenerator.doSwitch(value)) {

+

+						// If the value is an instance of UnresolvedReferenceHolder,

+						// it means that the link was not resolved

+						// We have to register this feature as unresolved.

+						if (generatedValue instanceof UnresolvedReferenceHolder) {

+

+							UnresolvedReferenceHolder referenceHolder = (UnresolvedReferenceHolder)generatedValue;

+							referenceHolder.setConcernedFeature(feature);

+							if (feature instanceof EReference) {

+								referenceHolder

+										.setContainmentReference(((EReference)feature).isContainment());

+							} else {

+								// If not a refence, it's an attribute

+								referenceHolder.setContainmentReference(true);

+							}

+

+							// We register this unresolved reference in the information holder

+							modelingUnitGenerator.getInformationHolder().addUnresolvedReference(eClass,

+									referenceHolder);

+						} else {

+							// Otherwise, we simply add this value to the generatedValues list.

+							generatedValues.add(generatedValue);

+						}

+					}

+				}

+

+				// Step 3 : we finally set the generated value to the given feature

+				setFeatureValueInElement(eClass, feature, generatedValues);

+

+			} else {

+				CompilationStatus status = CompilerFactory.eINSTANCE.createCompilationStatus();

+				status.setMessage("The feature " + feature.getName() + " is derived and cannot be set.");

+				status.setTarget(affectation);

+				status.setSeverity(CompilationStatusSeverity.WARNING);

+				status.setType(CompilationMessageType.VALIDATION_ERROR);

+				affectation.getCompilationStatus().add(status);

+			}

+		} catch (ResolveException e) {

+			// If the feature reference cannot be resolved

+			// we add a CompilationSats

+			modelingUnitGenerator.getInformationHolder().registerCompilationExceptionAsCompilationStatus(

+					new CompilationException(e.getInvalidInstruction(),

+							CompilationErrorType.INVALID_REFRENCE_ERROR, e.getMessage()));

+		}

+

+	}

+

+	/**

+	 * Used to set the given value to the given element.

+	 * 

+	 * @param element

+	 *            The element to which assign the given value.

+	 * @param feature

+	 *            The feature conserned by this affectation

+	 * @param values

+	 *            a list of the values to set

+	 */

+	// This suppressWarning is added to avoid the warning about the cast in EList<Object> in the

+	// element.eGet(feature) for multi-valued features

+	@SuppressWarnings("unchecked")

+	public static void setFeatureValueInElement(EObject element, EStructuralFeature feature,

+			List<Object> values) {

+		try {

+			// Step 1 : cardinality management

+			Object finalValueToSet = null;

+

+			if (values.size() > 0) {

+				// If we have a multi-valued Feature

+				if ((feature.getUpperBound() > 1) || (feature.getUpperBound() == -1)) {

+					// We add the new values to the possible previous ones

+					EList<Object> newValuesList = new BasicEList<Object>();

+					if (element.eGet(feature) != null) {

+						newValuesList.addAll((EList<Object>)element.eGet(feature));

+					}

+					newValuesList.addAll(values);

+					finalValueToSet = newValuesList;

+				} else {

+					// If it is a single valued feature, we just set the first value of the list

+					finalValueToSet = values.get(0);

+				}

+

+				// Step 2 : we set the value

+				if (finalValueToSet != null) {

+					try {

+						element.eSet(feature, finalValueToSet);

+					} catch (NullPointerException e) {

+						System.err.println("FOR ELEMENT " + feature.getName() + "-" + "/" + finalValueToSet

+								+ "-" + feature.getContainerClass().getName());

+						// TODO HANDLE THIS NPE

+						System.err.println(element.eGet(feature));

+					}

+				}

+			}

+		} catch (IllegalArgumentException e) {

+			// If an exception occurs here, it has already been handled and we just don't set the feature.

+		} catch (ClassCastException e) {

+			// If an exception occurs here, it has already been handled and we just don't set the feature.

+		} catch (ArrayStoreException e) {

+			// If an exception occurs here, it has already been handled and we just don't set the feature.

+

+		}

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/UnresolvedReferenceHolder.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/UnresolvedReferenceHolder.java
new file mode 100644
index 0000000..9403f17
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modelgeneration/UnresolvedReferenceHolder.java
@@ -0,0 +1,116 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modelgeneration;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EReference;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.emf.ecore.impl.EObjectImpl;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Symbolize a unresolved reference to an element in an Intent StructuralFeature Affectation.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class UnresolvedReferenceHolder extends EObjectImpl implements EObject {

+

+	/**

+	 * Instruction that made the reference.

+	 */

+	private final UnitInstruction instruction;

+

+	/**

+	 * The Structural feature containing the unresolved reference.

+	 */

+	private EStructuralFeature feature;

+

+	/**

+	 * Indicates if the hold reference should be contained or not.

+	 */

+	private boolean isContainedReference;

+

+	/**

+	 * The textual form of the given reference.

+	 */

+	private String href;

+

+	/**

+	 * UnresolvedReferenceHolder constructor.

+	 * 

+	 * @param referenceDeclaration

+	 *            the reference declaration containing the textual form of the reference to resolve.

+	 * @param href

+	 *            the textual value of the reference to contain

+	 */

+	public UnresolvedReferenceHolder(UnitInstruction referenceDeclaration, String href) {

+		this.instruction = referenceDeclaration;

+		this.href = href;

+		this.isContainedReference = false;

+	}

+

+	/**

+	 * Sets the Structural feature containing the unresolved reference.

+	 * 

+	 * @param targetFeature

+	 *            the Structural feature containing the unresolved reference

+	 */

+	public void setStructuralFeature(EStructuralFeature targetFeature) {

+		this.feature = targetFeature;

+		setContainedReference(((EReference)targetFeature).isContainment());

+	}

+

+	/**

+	 * Returns the Structural feature containing the unresolved reference.

+	 * 

+	 * @return the feature the Structural feature containing the unresolved reference

+	 */

+	public EStructuralFeature getFeature() {

+		return feature;

+	}

+

+	/**

+	 * Returns the textual form of the given reference.

+	 * 

+	 * @return the textual form of the given reference

+	 */

+	public String getTextualTarget() {

+		return this.href;

+	}

+

+	/**

+	 * Returns the instruction that declared this reference.

+	 * 

+	 * @return the instruction that declared this reference

+	 */

+	public UnitInstruction getInstruction() {

+		return instruction;

+	}

+

+	/**

+	 * Indicates if the hold reference should be contained or not.

+	 * 

+	 * @param isContained

+	 *            true if the hold reference should be contained or not, false otherwise

+	 */

+	private void setContainedReference(boolean isContained) {

+		this.isContainedReference = isContained;

+	}

+

+	/**

+	 * Indicates if the hold reference should be contained or not.

+	 * 

+	 * @return true if the hold reference is contained or not, false otherwise

+	 */

+	public boolean isContainedReference() {

+		return this.isContainedReference;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modellinking/ModelingUnitLinkResolver.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modellinking/ModelingUnitLinkResolver.java
new file mode 100644
index 0000000..b1f211f
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/generator/modellinking/ModelingUnitLinkResolver.java
@@ -0,0 +1,270 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EClassifier;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EPackage;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.InvalidReferenceException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.PackageNotFoundResolveException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.PackageRegistrationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.ResolveException;

+import org.eclipse.mylyn.docs.intent.client.compiler.utils.IntentCompilerInformationHolder;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.StructuralFeatureAffectation;

+

+/**

+ * Modeling UnitLinker : entity used to resolve reference in the modelingUnits or between generated elements.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class ModelingUnitLinkResolver {

+

+	/**

+	 * The package registry to use for resolving links.

+	 */

+	private EPackage.Registry packageRegistry;

+

+	/**

+	 * The repository allowing us to register generated packages.

+	 */

+	private Repository repository;

+

+	/**

+	 * The information holder to use for register the generated elements.

+	 */

+	private IntentCompilerInformationHolder informationHolder;

+

+	/**

+	 * MetaTypeLinkResolver constructor.

+	 * 

+	 * @param repository

+	 *            the repository which will provide the package registry to use for resolving links

+	 * @param informationHolder

+	 *            the information holder to use for register the generated elements

+	 * @throws RepositoryConnectionException

+	 *             if the connection to the repository is invalid

+	 */

+	public ModelingUnitLinkResolver(Repository repository, IntentCompilerInformationHolder informationHolder)

+			throws RepositoryConnectionException {

+		this.repository = repository;

+		this.informationHolder = informationHolder;

+		setPackageRegistry(repository.getPackageRegistry());

+

+	}

+

+	/**

+	 * Sets the package registry to use.

+	 * 

+	 * @param packageRegistry

+	 *            the package registry to use

+	 */

+	public void setPackageRegistry(Object packageRegistry) {

+		this.packageRegistry = (EPackage.Registry)packageRegistry;

+	}

+

+	/**

+	 * Returns the structuralFeature described by the given structuralFeatureAffectation, in the scope of the

+	 * given eClass.

+	 * 

+	 * @param affectation

+	 *            the structuralFeatureAffectation to inspect

+	 * @param eClass

+	 *            the eClass containing the described structuralFeatures

+	 * @return the structuralFeature described by the given structuralFeatureAffectation, in the scope of the

+	 *         given eClass

+	 * @throws ResolveException

+	 *             if the given eClass has no feature named has described in the StructuralFeatureAffectation

+	 */

+	public EStructuralFeature resolveEStructuralFeature(StructuralFeatureAffectation affectation,

+			EClass eClass) throws ResolveException {

+

+		String featureHRef = affectation.getName();

+		EStructuralFeature foundFeature = eClass.getEStructuralFeature(featureHRef);

+		if (foundFeature == null) {

+			throw new ResolveException(affectation, "The feature " + featureHRef + " doesn't exists in "

+					+ eClass.getName());

+		}

+		return foundFeature;

+	}

+

+	/**

+	 * Returns the eClassifier described by the given textual reference, exploring all the packages registered

+	 * in the package registry.

+	 * 

+	 * @param instruction

+	 *            the instruction containing the eClassifier to resolve

+	 * @param href

+	 *            the textual reference of an eClassifier

+	 * @return the eClass described by the given textual reference

+	 * @throws ResolveException

+	 *             if the given reference doesn't match any class of any package

+	 */

+	public EClassifier resolveEClassifierUsingPackageRegistry(UnitInstruction instruction, String href)

+			throws ResolveException {

+

+		// We get all the packages to inspect from the package repository

+		List<EPackage> packageToInspect = new ArrayList<EPackage>();

+		for (String packageURI : this.packageRegistry.keySet()) {

+			packageToInspect.add(this.packageRegistry.getEPackage(packageURI));

+		}

+

+		EClassifier resolvedClassifier = null;

+		// For each package, we try to resolve the reference

+		for (EPackage ePackage : packageToInspect) {

+			try {

+				resolvedClassifier = resolveEClassifierUsingPackage(instruction, ePackage.getNsURI(), href);

+			} catch (PackageNotFoundResolveException e) {

+				// As the nsURI is directly given by an registered ePackage, this exception cannot appen.

+			}

+			if (resolvedClassifier != null) {

+				break;

+			}

+		}

+

+		if (resolvedClassifier == null) {

+			throw new ResolveException(instruction, "The Entity " + href + "cannot be resolved");

+		}

+		return resolvedClassifier;

+	}

+

+	/**

+	 * * Returns the eClass described by the given textual reference, exploring each package associated to the

+	 * given list of nsURIs.

+	 * 

+	 * @param instruction

+	 *            the instruction containing the eClassifier to resolve

+	 * @param packageURIs

+	 *            the URI associated to the packages

+	 * @param href

+	 *            the textual reference to an EClass

+	 * @throws PackageNotFoundResolveException

+	 *             if on of the given nsURIs doesn't match to any package of the packageRegistry

+	 * @return the eClass described by the given textual reference, exploring all the package with the given

+	 * @throws ResolveException

+	 *             if the given reference doesn't match any class of any package nsURI

+	 */

+	public EClassifier resolveEClassifierUsingPackage(UnitInstruction instruction, List<String> packageURIs,

+			String href) throws ResolveException, PackageNotFoundResolveException {

+

+		EClassifier resolvedClass = null;

+		for (String nsURI : packageURIs) {

+			resolvedClass = resolveEClassifierUsingPackage(instruction, nsURI, href);

+			if (resolvedClass != null) {

+				break;

+			}

+		}

+		if (resolvedClass == null) {

+			throw new ResolveException(instruction, "The Entity " + href

+					+ " cannot be resolved in the packages " + packageURIs);

+

+		}

+		return resolvedClass;

+	}

+

+	/**

+	 * * Returns the eClassifier described by the given textual reference, exploring the package with the

+	 * given nsURI.

+	 * 

+	 * @param instruction

+	 *            the instruction containing the eClassifier to resolve

+	 * @param nsURI

+	 *            the URI of the package

+	 * @param href

+	 *            the textual reference to an EClassifier

+	 * @throws PackageNotFoundResolveException

+	 *             if the given nsURI doesn't match to any package of the packageRegistry

+	 * @return the eClass described by the given textual reference, exploring the package with the given nsURI

+	 */

+	private EClassifier resolveEClassifierUsingPackage(UnitInstruction instruction, String nsURI, String href)

+			throws PackageNotFoundResolveException {

+

+		EPackage ePackage = this.packageRegistry.getEPackage(nsURI);

+

+		if (ePackage == null) {

+			throw new PackageNotFoundResolveException(instruction, "The package with nsURI \"" + nsURI

+					+ "\" cannot be found. ");

+		}

+		EClassifier resolvedClass = null;

+		EClassifier foundClassifier = ePackage.getEClassifier(href);

+		if (foundClassifier != null) {

+			resolvedClass = foundClassifier;

+		}

+		return resolvedClass;

+	}

+

+	/**

+	 * resolve an undresolved reference using the informationHolder's informations.

+	 * 

+	 * @param instruction

+	 *            the instruction that makes this reference (used to construct error message).

+	 * @param searchedType

+	 *            the type of the searched element (can be null if unknown)

+	 * @param referencedValue

+	 *            the textual value of the reference

+	 * @return the element matching this reference

+	 * @throws InvalidReferenceException

+	 *             if the element cannot be found in the generated element list

+	 */

+	public EObject resolveReferenceinElementList(UnitInstruction instruction, EClassifier searchedType,

+			String referencedValue) throws InvalidReferenceException {

+		EObject foundReference = (EObject)informationHolder.getCreatedInstanceByName(searchedType,

+				referencedValue);

+

+		if (foundReference == null) {

+			throw new InvalidReferenceException(instruction, "The reference " + referencedValue

+					+ " cannot be resolved. ");

+		}

+

+		return foundReference;

+

+	}

+

+	/**

+	 * Register the given ePackage in the package registry.

+	 * 

+	 * @param instruction

+	 *            the instruction that makes this reference (used to construct error message)

+	 * @param generatedPackage

+	 *            the ePackage to register

+	 */

+	public void registerInPackageRegistry(UnitInstruction instruction, EPackage generatedPackage) {

+

+		// We prepare a standard exception

+		PackageRegistrationException exception = new PackageRegistrationException(

+				instruction,

+				"the generated package \""

+						+ generatedPackage.getNsURI()

+						+ "\" cannot be registered (maybe because of an invalid connection to the repository)");

+

+		// If no package exception has been registered, we throw this exception

+		if (this.repository == null) {

+			throw exception;

+		}

+

+		// We try to add the generated package to the packageRegistry

+		try {

+

+			repository.getPackageRegistry().put(generatedPackage.getNsURI(), generatedPackage);

+

+		} catch (RepositoryConnectionException e) {

+			throw exception;

+		}

+

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/launcher/CompilerCreator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/launcher/CompilerCreator.java
new file mode 100644
index 0000000..be96be4
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/launcher/CompilerCreator.java
@@ -0,0 +1,96 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.launcher;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.Set;

+

+import org.eclipse.emf.ecore.EClass;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.mylyn.docs.intent.client.compiler.repositoryconnection.CompilerRepositoryClient;

+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.ReadWriteRepositoryObjectHandlerImpl;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.typeListener.TypeNotificator;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.Notificator;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.collab.utils.RepositoryCreatorHolder;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;

+import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;

+

+/**

+ * Creates Compiler repository clients.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class CompilerCreator {

+

+	/**

+	 * CompilerCreator constructor.

+	 */

+	private CompilerCreator() {

+

+	}

+

+	/**

+	 * Creates a CompilerRepositoryClient.

+	 * 

+	 * @param repository

+	 *            is the repository containing the modeling units to compile

+	 * @throws RepositoryConnectionException

+	 *             if a connection to the given repository cannot be established

+	 * @return the created CompilerRepositoryClient

+	 */

+	public static CompilerRepositoryClient createCompilerClient(Repository repository)

+			throws RepositoryConnectionException {

+

+		// Step 1 : intialize the listened types

+		Set<EStructuralFeature> listenedTypes = new HashSet<EStructuralFeature>();

+

+		for (EObject obj : ModelingUnitPackage.eINSTANCE.eContents()) {

+			if (obj instanceof EClass) {

+				listenedTypes.addAll(TypeNotificator.getStructuralFeaturesForEClass((EClass)obj));

+			}

+		}

+		listenedTypes.remove(IntentDocumentPackage.eINSTANCE.getIntentGenericElement_CompilationStatus());

+		listenedTypes.remove(GenericUnitPackage.eINSTANCE.getGenericUnit_Instructions());

+		listenedTypes.remove(GenericUnitPackage.eINSTANCE.getGenericUnit_UnitName());

+

+		// Step 2 : defining all the resource that once been saved should not cause a session warning

+		Collection<String> resourcesToIgnorePaths = new ArrayList<String>();

+		resourcesToIgnorePaths.add(IntentLocations.INTENT_FOLDER);

+

+		// Step 3 : create the adapter and the handler for these types

+		final RepositoryAdapter repositoryAdapter = RepositoryCreatorHolder.getCreator()

+				.createRepositoryAdapterForRepository(repository);

+

+		repositoryAdapter.setSendSessionWarningBeforeSaving(resourcesToIgnorePaths);

+		RepositoryObjectHandler handler = new ReadWriteRepositoryObjectHandlerImpl(repositoryAdapter);

+

+		Notificator notificator = new TypeNotificator(listenedTypes);

+		handler.setNotificator(notificator);

+

+		// Step 4 : create the compiler

+		CompilerRepositoryClient compilerClient = new CompilerRepositoryClient();

+		compilerClient.setRepository(repository);

+		compilerClient.addRepositoryObjectHandler(handler);

+

+		System.err.println("Created : " + compilerClient);

+		return compilerClient;

+

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilationOperation.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilationOperation.java
new file mode 100644
index 0000000..9953ca8
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilationOperation.java
@@ -0,0 +1,134 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.repositoryconnection;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.client.compiler.ModelingUnitCompiler;

+import org.eclipse.mylyn.docs.intent.client.compiler.generator.modellinking.ModelingUnitLinkResolver;

+import org.eclipse.mylyn.docs.intent.client.compiler.utils.IntentCompilerInformationHolder;

+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnit;

+import org.eclipse.mylyn.docs.intent.core.query.UnitGetter;

+

+/**

+ * Represents a compilation operation, that compiles all the modeling units contained in the repository.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class CompilationOperation implements Runnable {

+	/**

+	 * The repository Object Handler to use for receiving notification.

+	 */

+	private RepositoryObjectHandler repositoryObjectHandler;

+

+	/**

+	 * The repository to use for acces to package registry and several informations.

+	 */

+	private Repository repository;

+

+	private CompilerRepositoryClient compilerRepositoryClient;

+

+	/**

+	 * Indicates if the current operation has been canceled by the repository client.

+	 */

+	private boolean isCanceled;

+

+	/**

+	 * CompilationOperation constructor.

+	 * 

+	 * @param repositoryObjectHandler

+	 *            the repository Object Handler to use for receiving notification

+	 * @param repository

+	 *            the repository to use for access to package registry and several informations

+	 * @param compilerRepositoryClient

+	 *            the client that launched this compilation operation

+	 */

+	public CompilationOperation(RepositoryObjectHandler repositoryObjectHandler, Repository repository,

+			CompilerRepositoryClient compilerRepositoryClient) {

+		this.repositoryObjectHandler = repositoryObjectHandler;

+		this.repository = repository;

+		this.compilerRepositoryClient = compilerRepositoryClient;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see java.lang.Runnable#run()

+	 */

+	public void run() {

+		try {

+

+			if (!isCanceled) {

+

+				ModelingUnitCompiler compiler = null;

+				ModelingUnitLinkResolver resolver = null;

+				List<ModelingUnit> modelingUnitsToCompile = new ArrayList<ModelingUnit>();

+

+				// InformationHolder Initialization

+				final Resource resourceIndex = repositoryObjectHandler.getRepositoryAdapter().getResource(

+						IntentLocations.INTENT_INDEX);

+

+				IntentCompilerInformationHolder informationHolder = IntentCompilerInformationHolder.getInstance();

+				informationHolder.initialize();

+

+				// LinkResolver initialization

+

+				if (!isCanceled) {

+					resolver = new ModelingUnitLinkResolver(repository, informationHolder);

+				}

+

+				// Compiler initialization

+				if (!isCanceled) {

+					compiler = new ModelingUnitCompiler(resolver, informationHolder);

+

+					for (EObject resourceContent : resourceIndex.getContents()) {

+						modelingUnitsToCompile.addAll(UnitGetter

+								.getAllModelingUnitsContainedInElement(resourceContent));

+					}

+				}

+

+				// Compilation

+				if (!isCanceled) {

+					compiler.compile(modelingUnitsToCompile);

+				}

+				// Saving the new compilations errors

+				if (!isCanceled) {

+					System.err.println("[Compiler] compiled : "

+							+ informationHolder.getDeclaredResources().size() + " resources. ");

+					System.err.println("[Compiler] saving...");

+					compilerRepositoryClient.saveCompilationInformations(informationHolder);

+					System.err.println("[Compiler] saved.");

+

+				}

+			}

+		} catch (RepositoryConnectionException e) {

+			e.printStackTrace();

+			System.err.println("[Compiler] Compilation  Failed");

+		}

+	}

+

+	/**

+	 * Cancels the current operation.

+	 * 

+	 * @param canceled

+	 *            indicates if the current operation is canceled or not.

+	 */

+	public void setCanceled(boolean canceled) {

+		this.isCanceled = canceled;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilerRepositoryClient.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilerRepositoryClient.java
new file mode 100644
index 0000000..83d428c
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/repositoryconnection/CompilerRepositoryClient.java
@@ -0,0 +1,141 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.repositoryconnection;

+

+import org.eclipse.mylyn.docs.intent.client.compiler.saver.CompilerInformationsSaver;

+import org.eclipse.mylyn.docs.intent.client.compiler.utils.IntentCompilerInformationHolder;

+import org.eclipse.mylyn.docs.intent.collab.handlers.ReadWriteRepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.SaveException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+

+/**

+ * In charge of communication between the repository and the compiler ; launch a compilation operation each

+ * time a modification on modeling units is detected.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class CompilerRepositoryClient implements RepositoryClient {

+

+	/**

+	 * The repository Object Handler to use for receiving notification.

+	 */

+	private ReadWriteRepositoryObjectHandler repositoryObjectHandler;

+

+	/**

+	 * The repository to use for acces to package registry and several informations.

+	 */

+	private Repository repository;

+

+	/**

+	 * Operation that compiles all the modeling units contained in the repository.

+	 */

+	private CompilationOperation compilationOperation;

+

+	/**

+	 * Thread that holds the compilation Operation.

+	 */

+	private Thread currentThread;

+

+	/**

+	 * Sets the repository to use for saving and closing getConnexion.

+	 * 

+	 * @param repository

+	 *            the repository to use for saving and closing getConnexion

+	 */

+	public void setRepository(Repository repository) {

+		this.repository = repository;

+		this.repository.register(this);

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.handlers.RepositoryClient#addRepositoryObjectHandler(org.eclipse.mylyn.docs.intent.handlers.RepositoryObjectHandler)

+	 */

+	public void addRepositoryObjectHandler(RepositoryObjectHandler handler) {

+		handler.addClient(this);

+		repositoryObjectHandler = (ReadWriteRepositoryObjectHandler)handler;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.handlers.RepositoryClient#removeRepositoryObjectHandler(org.eclipse.mylyn.docs.intent.handlers.RepositoryObjectHandler)

+	 */

+	public void removeRepositoryObjectHandler(RepositoryObjectHandler handler) {

+		handler.removeClient(this);

+		repositoryObjectHandler = null;

+

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.handlers.RepositoryClient#handleChangeNotification(org.eclipse.mylyn.docs.intent.handlers.notification.RepositoryChangeNotification)

+	 */

+	// We are sure that calling stop on the thread cannot dommage our application.

+	public void handleChangeNotification(RepositoryChangeNotification notification) {

+

+		System.err.println("[Compiler] Received Notification " + notification);

+		if (compilationOperation == null) {

+			compilationOperation = new CompilationOperation(repositoryObjectHandler, repository, this);

+		}

+

+		// If a compilationOperation is currently running

+		// we cancel it and wait for the thread to die

+		if ((currentThread != null) && (currentThread.isAlive())) {

+			compilationOperation.setCanceled(true);

+			System.err.println("[Compiler] cancelling...");

+			try {

+				currentThread.join();

+			} catch (InterruptedException e) {

+				// TODO handle such a case

+			}

+		}

+

+		// Then we launch a new compilation Operation

+		compilationOperation.setCanceled(false);

+		System.err.println("[Compiler] compiling...");

+		currentThread = new Thread(compilationOperation);

+		currentThread.start();

+	}

+

+	/**

+	 * Saves the informations calculated during the compilationOperation.

+	 * 

+	 * @param compilationInformationHolder

+	 *            the entity containing all informations needed by this compiler

+	 */

+	public void saveCompilationInformations(IntentCompilerInformationHolder compilationInformationHolder) {

+		repositoryObjectHandler.getRepositoryAdapter().openSaveContext();

+		CompilerInformationsSaver saver = new CompilerInformationsSaver();

+		saver.saveOnRepository(compilationInformationHolder, repositoryObjectHandler);

+

+		try {

+			repositoryObjectHandler.getRepositoryAdapter().save();

+		} catch (ReadOnlyException e) {

+			// We are sure that this compiler isn't in read-only mode

+		} catch (SaveException e) {

+			try {

+				repositoryObjectHandler.getRepositoryAdapter().undo();

+			} catch (ReadOnlyException e1) {

+				// We are sure that this compiler isn't in read-only mode

+			}

+

+		}

+		repositoryObjectHandler.getRepositoryAdapter().closeContext();

+

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/saver/CompilerInformationsSaver.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/saver/CompilerInformationsSaver.java
new file mode 100644
index 0000000..03eeb89
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/saver/CompilerInformationsSaver.java
@@ -0,0 +1,360 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.saver;

+

+import java.math.BigInteger;

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.emf.cdo.util.ObjectNotFoundException;

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.client.compiler.utils.IntentCompilerInformationHolder;

+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndex;

+import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndexEntry;

+import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnit;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+

+/**

+ * Save all the compilation informations on the repository.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class CompilerInformationsSaver {

+

+	private Map<ResourceDeclaration, Map<EObject, IntentGenericElement>> resourceToTraceabilityElementIndexEntry;

+

+	/**

+	 * Save the useful informations contained in the given IntentCompilerInformationHolder on the repository,

+	 * merging with the current repository content.

+	 * 

+	 * @param informationHolder

+	 *            the informationHolder containing the informations to put on the repository

+	 * @param handler

+	 *            the repositoryObjectHandler to use for communicating with the repository

+	 */

+	public void saveOnRepository(IntentCompilerInformationHolder informationHolder,

+			RepositoryObjectHandler handler) {

+		resourceToTraceabilityElementIndexEntry = new HashMap<ResourceDeclaration, Map<EObject, IntentGenericElement>>();

+		try {

+			// We first save the generated elements

+			Map<ResourceDeclaration, String> resourceToGeneratedPath = saveGeneratedResources(

+					informationHolder, handler);

+			// We also save the status informations.

+			saveStatusInformations(informationHolder, handler);

+

+			// We finally save the traceability informations

+			saveTraceabilityInformations(resourceToGeneratedPath, handler);

+			// CHECKSTYLE:OFF : for now on we would like to print any exception

+		} catch (Exception e) {

+			e.printStackTrace();

+			try {

+				handler.getRepositoryAdapter().undo();

+			} catch (ReadOnlyException e1) {

+				// FIXME handle this exception

+			}

+		}

+	}

+

+	/**

+	 * Save all the generated elements into internal Repository resources.

+	 * 

+	 * @param informationHolder

+	 *            the informationHolder containing the information to save

+	 * @param handler

+	 *            the handler to use for saving on the repository

+	 * @return a mapping between each resource declaration and the path where it has been saved.

+	 * @throws ReadOnlyException

+	 *             if the current context is read-only

+	 */

+	private Map<ResourceDeclaration, String> saveGeneratedResources(

+			IntentCompilerInformationHolder informationHolder, RepositoryObjectHandler handler)

+			throws ReadOnlyException {

+

+		Map<ResourceDeclaration, String> resourceInfos = new HashMap<ResourceDeclaration, String>();

+		// We save each generated resource in a CDOResource

+		for (ResourceDeclaration resource : informationHolder.getDeclaredResources()) {

+			String internalResourcePath = getInternalResourcePath(resource);

+

+			Resource generatedResource = handler.getRepositoryAdapter().getOrCreateResource(

+					internalResourcePath);

+			resourceInfos.put(resource, internalResourcePath);

+			generatedResource.getContents().clear();

+

+			// We update the resourceToTraceabilityElementIndexEntry map using this resource content

+			updateTraceabilityFromResourceContent(resource, informationHolder,

+					informationHolder.getResourceContent(resource));

+			generatedResource.getContents().addAll(informationHolder.getResourceContent(resource));

+		}

+		return resourceInfos;

+	}

+

+	/**

+	 * Associate the given resource with a mapping associating its contained compiled element with the

+	 * instruction that created those elements.

+	 * 

+	 * @param resource

+	 *            the resource to consider

+	 * @param informationHolder

+	 *            the informationHolder containing the informations needed

+	 * @param elementsToConsider

+	 *            a list of generated element contained in the given resource

+	 */

+	private void updateTraceabilityFromResourceContent(ResourceDeclaration resource,

+			IntentCompilerInformationHolder informationHolder, EList<EObject> elementsToConsider) {

+

+		// For each element contained in the resource

+		for (EObject element : elementsToConsider) {

+			// We get the instruction that defined this element

+			UnitInstruction instruction = informationHolder.getInstructionByCreatedElement(element);

+

+			if (instruction != null) {

+				// We add an entry to the traceability map

+				if (resourceToTraceabilityElementIndexEntry.get(resource) == null) {

+					resourceToTraceabilityElementIndexEntry.put(resource,

+							new HashMap<EObject, IntentGenericElement>());

+				}

+				resourceToTraceabilityElementIndexEntry.get(resource).put(element, instruction);

+

+				// We do the same for each contained element

+				updateTraceabilityFromResourceContent(resource, informationHolder, element.eContents());

+			}

+		}

+	}

+

+	/**

+	 * Save all the status informations related to the generated elements.

+	 * 

+	 * @param informationHolder

+	 *            the informationHolder containing the information to save

+	 * @param handler

+	 *            the handler to use for saving on the repository

+	 * @throws ReadOnlyException

+	 *             if the current context is read-only

+	 */

+	private void saveStatusInformations(IntentCompilerInformationHolder informationHolder,

+			RepositoryObjectHandler handler) throws ReadOnlyException {

+		Resource resourceForCompilationStatusList = handler.getRepositoryAdapter().getOrCreateResource(

+				IntentLocations.COMPILATION_STATUS_INDEX_PATH);

+

+		if (resourceForCompilationStatusList.getContents().isEmpty()) {

+			resourceForCompilationStatusList.getContents().add(

+					CompilerFactory.eINSTANCE.createCompilationStatusManager());

+		}

+		CompilationStatusManager manager = (CompilationStatusManager)resourceForCompilationStatusList

+				.getContents().get(0);

+

+		mergeCompilationStatusManager(informationHolder.getStatusManager(), manager,

+				resourceForCompilationStatusList);

+	}

+

+	/**

+	 * Save all the traceability informations.

+	 * 

+	 * @param resourceToGeneratedPath

+	 *            the list of the resourceDeclaration associate to the internal path where it has been

+	 *            generated

+	 * @param handler

+	 *            the handler to use for saving on the repository

+	 * @throws ReadOnlyException

+	 *             if the current context is read-only

+	 */

+	private void saveTraceabilityInformations(Map<ResourceDeclaration, String> resourceToGeneratedPath,

+			RepositoryObjectHandler handler) throws ReadOnlyException {

+

+		// We first get the Traceability index

+		final Resource traceabilityResource = handler.getRepositoryAdapter().getResource(

+				IntentLocations.TRACEABILITY_INFOS_INDEX_PATH);

+

+		if (traceabilityResource.getContents().isEmpty()) {

+			traceabilityResource.getContents().add(CompilerFactory.eINSTANCE.createTraceabilityIndex());

+		}

+		TraceabilityIndex traceIndex = (TraceabilityIndex)traceabilityResource.getContents().get(0);

+

+		List<TraceabilityIndexEntry> newTraceabilityEntries = new ArrayList<TraceabilityIndexEntry>();

+		// For each compiled resource

+		for (ResourceDeclaration resourceDeclaration : resourceToGeneratedPath.keySet()) {

+			// We create a tracability entry

+			TraceabilityIndexEntry entry = CompilerFactory.eINSTANCE.createTraceabilityIndexEntry();

+			entry.setCompilationTime(BigInteger.valueOf(System.currentTimeMillis()));

+			entry.setGeneratedResourcePath(resourceToGeneratedPath.get(resourceDeclaration));

+			entry.setResourceDeclaration(resourceDeclaration);

+

+			// For each entry, we define a mapping between contained elements and instructions

+			entry.getContainedElementToInstructions().putAll(

+					resourceToTraceabilityElementIndexEntry.get(resourceDeclaration));

+			newTraceabilityEntries.add(entry);

+		}

+		traceIndex.getEntries().clear();

+		traceIndex.getEntries().addAll(newTraceabilityEntries);

+	}

+

+	/**

+	 * Returns the internal path corresponding to the given resource (i.e the path where the generated

+	 * resource will be located).

+	 * 

+	 * @param resource

+	 *            is the resource

+	 * @return the internal path corresponding to the given resource (i.e the path where the generated

+	 *         resource will be located)

+	 */

+	private String getInternalResourcePath(ResourceDeclaration resource) {

+		String resourcePath = ((String)resource.getUri()).replace("\"", "");

+		if (resourcePath.contains("/")) {

+			resourcePath = resourcePath.substring(resourcePath.lastIndexOf('/') + 1);

+		}

+		resourcePath = IntentLocations.GENERATED_RESOURCES_FOLDER_PATH + resourcePath;

+		return resourcePath;

+	}

+

+	/**

+	 * Returns true if the given compilationSatus is contained in the given CompilationStatus list (a status

+	 * is contained in a status list if this list has a status with the same target, type and message).

+	 * 

+	 * @param statusList

+	 *            the list of status to inspect

+	 * @param status

+	 *            the status which we want to know wether is contained in this list or not

+	 * @return true if the given status is contained in the given list, false otherwise

+	 */

+	private boolean isContainedCompilationStatus(EList<CompilationStatus> statusList, CompilationStatus status) {

+		boolean statusIsContainedInList = false;

+		if (statusList != null) {

+			Iterator<CompilationStatus> iterator = statusList.iterator();

+			while (iterator.hasNext() && !statusIsContainedInList) {

+				CompilationStatus containedStatus = iterator.next();

+				statusIsContainedInList = isSimilarStatus(containedStatus, status);

+			}

+		}

+		return statusIsContainedInList;

+	}

+

+	/**

+	 * Indicates if the two given status have the same value for each attribute.

+	 * 

+	 * @param containedStatus

+	 *            the first status to compare with the second one

+	 * @param status

+	 *            the second status to compare with the first one

+	 * @return true if the two given status have the same value for each attribute, false otherwise.

+	 */

+	private boolean isSimilarStatus(CompilationStatus containedStatus, CompilationStatus status) {

+		try {

+			// FIXME do not use cdoID but repositoryAdapter.getIDForElement

+			return containedStatus.getMessage().equals(status.getMessage())

+					&& containedStatus.getSeverity().equals(status.getSeverity())

+					&& containedStatus.getTarget().cdoID() == status.getTarget().cdoID()

+					&& containedStatus.getType().equals(status.getType());

+		} catch (NullPointerException e) {

+			return false;

+		}

+	}

+

+	/**

+	 * Merge the local statusManager with the repository statusManager.

+	 * 

+	 * @param localStatusManager

+	 *            the local statusManager

+	 * @param repositoryStatusManager

+	 *            the repository StatusManager

+	 * @param statusManagerResource

+	 *            the resource containing the repositoryStatusManager

+	 */

+	private void mergeCompilationStatusManager(CompilationStatusManager localStatusManager,

+			CompilationStatusManager repositoryStatusManager, Resource statusManagerResource) {

+

+		// Step 1 : Cleaning repositoryRootModel

+		// Step 1.1 : removing dangling references

+		removeDanglingReferences(repositoryStatusManager, statusManagerResource);

+

+		List<IntentGenericElement> genEl = new ArrayList<IntentGenericElement>();

+		for (CompilationStatus compilationStatus : repositoryStatusManager.getCompilationStatusList()) {

+			// System.err.println(compilationStatus.getTarget());

+			genEl.add(compilationStatus.getTarget());

+

+		}

+

+		List<EObject> cleanTargets = new ArrayList<EObject>();

+		// Step 2 : adding all the new compilation status

+		for (ModelingUnit mu : localStatusManager.getModelingUnitToStatusList().keySet()) {

+			for (CompilationStatus status : localStatusManager.getModelingUnitToStatusList().get(mu)) {

+				if (!isContainedCompilationStatus(

+						repositoryStatusManager.getModelingUnitToStatusList().get(mu), status)) {

+

+					if (!repositoryStatusManager.getCompilationStatusList().contains(status)) {

+						repositoryStatusManager.getCompilationStatusList().add(status);

+						if (!status.getTarget().getCompilationStatus().contains(status)) {

+							if (!cleanTargets.contains(status.getTarget())) {

+								cleanTargets.add(status.getTarget());

+								status.getTarget().getCompilationStatus().clear();

+							}

+							status.getTarget().getCompilationStatus().add(status);

+						}

+					}

+					if (repositoryStatusManager.getModelingUnitToStatusList().get(mu) == null) {

+						repositoryStatusManager.getModelingUnitToStatusList().put(mu,

+								new BasicEList<CompilationStatus>());

+					}

+					try {

+						repositoryStatusManager.getModelingUnitToStatusList().get(mu).add(status);

+					} catch (NullPointerException e) {

+						// TODO remove this catch, only for test

+						e.printStackTrace();

+					}

+

+				}

+			}

+		}

+

+		genEl = new ArrayList<IntentGenericElement>();

+		for (CompilationStatus compilationStatus : repositoryStatusManager.getCompilationStatusList()) {

+			genEl.add(compilationStatus.getTarget());

+

+		}

+	}

+

+	/**

+	 * Removes all the dangling references contained in the given CompilationStatusManger.

+	 * 

+	 * @param repositoryStatusManager

+	 *            the compilationSatusManager from which remove the dangling references

+	 * @param statusManagerResource

+	 *            the resource containing the repositoryStatusManager

+	 * @return the modified CompilationStatusManager

+	 */

+	private CompilationStatusManager removeDanglingReferences(

+			CompilationStatusManager repositoryStatusManager, Resource statusManagerResource) {

+		CompilationStatusManager manager = repositoryStatusManager;

+		try {

+			manager.getCompilationStatusList().clear();

+			manager.getModelingUnitToStatusList().clear();

+		} catch (ObjectNotFoundException notFoundException) {

+			statusManagerResource.getContents().clear();

+			manager = CompilerFactory.eINSTANCE.createCompilationStatusManager();

+			statusManagerResource.getContents().add(manager);

+		}

+		return manager;

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/utils/CompilationStatusConverter.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/utils/CompilationStatusConverter.java
new file mode 100644
index 0000000..5c12125
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/utils/CompilationStatusConverter.java
@@ -0,0 +1,130 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.utils;

+

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationErrorType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusSeverity;

+

+/**

+ * Converts different kind of information into compilationSatus.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class CompilationStatusConverter {

+

+	/**

+	 * CompilationStatusConverter constructor.

+	 */

+	private CompilationStatusConverter() {

+

+	}

+

+	/**

+	 * Returns the StatusSeverity according to the given diagnostic.

+	 * 

+	 * @param diagnostic

+	 *            a diagnostic given by an EMF validator.

+	 * @return the StatusSeverity according to the given diagnostic

+	 */

+	public static CompilationStatusSeverity createStatusSeverityFromDiagnosticSeverity(Diagnostic diagnostic) {

+

+		CompilationStatusSeverity returnedSeverity = null;

+		switch (diagnostic.getSeverity()) {

+			case Diagnostic.INFO:

+				returnedSeverity = CompilationStatusSeverity.INFO;

+				break;

+			case Diagnostic.ERROR:

+				returnedSeverity = CompilationStatusSeverity.WARNING;

+				break;

+			case Diagnostic.WARNING:

+				returnedSeverity = CompilationStatusSeverity.WARNING;

+				break;

+			default:

+				returnedSeverity = CompilationStatusSeverity.OK;

+		}

+

+		return returnedSeverity;

+	}

+

+	/**

+	 * Returns the CompilationSatus's MessageType according to the given CompilationErrorType.

+	 * 

+	 * @param type

+	 *            the type of a compilationException

+	 * @return the CompilationSatus messageType.

+	 */

+	public static CompilationMessageType createStatusTypeFromCompilationExceptionErrorType(

+			CompilationErrorType type) {

+		CompilationMessageType returnedMessageType = null;

+		switch (type) {

+			case INVALID_REFRENCE_ERROR:

+				returnedMessageType = CompilationMessageType.INVALID_REFERENCE_ERROR;

+				break;

+			case INVALID_VALUE_ERROR:

+				returnedMessageType = CompilationMessageType.INVALID_VALUE_ERROR;

+				break;

+			case PACKAGE_NOT_FOUND_ERROR:

+				returnedMessageType = CompilationMessageType.PACKAGE_NOT_FOUND_ERROR;

+				break;

+			case PACKAGE_REGISTRATION_ERROR:

+				returnedMessageType = CompilationMessageType.PACKAGE_REGISTRATION_ERROR;

+				break;

+			case RESOLVE_ERROR:

+				returnedMessageType = CompilationMessageType.RESOLVE_ERROR;

+				break;

+			case VALIDATION_ERROR:

+				returnedMessageType = CompilationMessageType.VALIDATION_ERROR;

+				break;

+			default:

+				returnedMessageType = CompilationMessageType.GENERAL_WARNING;

+		}

+

+		return returnedMessageType;

+	}

+

+	/**

+	 * Returns the StatusSeverity according to the given compilationErrorType.

+	 * 

+	 * @param type

+	 *            the type of a compilationException

+	 * @return the corresponding CompilationStatus Severity

+	 */

+	public static CompilationStatusSeverity createStatusSeverityFromCompilationExceptionErrorType(

+			CompilationErrorType type) {

+		CompilationStatusSeverity returnedSeverity = null;

+		switch (type) {

+			case INVALID_REFRENCE_ERROR:

+				returnedSeverity = CompilationStatusSeverity.ERROR;

+				break;

+			case INVALID_VALUE_ERROR:

+				returnedSeverity = CompilationStatusSeverity.ERROR;

+				break;

+			case PACKAGE_NOT_FOUND_ERROR:

+				returnedSeverity = CompilationStatusSeverity.ERROR;

+				break;

+			case PACKAGE_REGISTRATION_ERROR:

+				returnedSeverity = CompilationStatusSeverity.ERROR;

+				break;

+			case RESOLVE_ERROR:

+				returnedSeverity = CompilationStatusSeverity.ERROR;

+				break;

+			case VALIDATION_ERROR:

+				returnedSeverity = CompilationStatusSeverity.WARNING;

+				break;

+			default:

+				returnedSeverity = CompilationStatusSeverity.INFO;

+		}

+

+		return returnedSeverity;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/utils/IntentCompilerInformationHolder.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/utils/IntentCompilerInformationHolder.java
new file mode 100644
index 0000000..a287481
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/utils/IntentCompilerInformationHolder.java
@@ -0,0 +1,501 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.utils;

+

+import java.util.List;

+import java.util.Set;

+

+import org.eclipse.emf.common.util.BasicEList;

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.common.util.EList;

+import org.eclipse.emf.common.util.EMap;

+import org.eclipse.emf.ecore.EClassifier;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.InvalidValueException;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationInformationHolder;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusManager;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.compiler.StringToEObjectMap;

+import org.eclipse.mylyn.docs.intent.core.compiler.UnresolvedContributionHolder;

+import org.eclipse.mylyn.docs.intent.core.compiler.UnresolvedReferenceHolder;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ContributionInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.InstanciationInstruction;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnit;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+

+/**

+ * Class storing all the informations that can be needed by any entity of the compilation process.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class IntentCompilerInformationHolder {

+

+	/**

+	 * Current instance of the information Holder (singleton).

+	 */

+	private static IntentCompilerInformationHolder currentInstance;

+

+	/**

+	 * The informationHolder used to store informations.

+	 */

+	private CompilationInformationHolder informationHolder;

+

+	/**

+	 * List of the currentImportedPackages.

+	 */

+	private List<String> currentImportedPackages;

+

+	private CompilationStatusManager statusManager;

+

+	/**

+	 * IntentCompilerInformationHolder constructor.

+	 */

+	private IntentCompilerInformationHolder() {

+		this.informationHolder = CompilerFactory.eINSTANCE.createCompilationInformationHolder();

+	}

+

+	/**

+	 * Returns the current instance of the information Holder (singleton).

+	 * 

+	 * @return the current instance of the information Holder (singleton)

+	 */

+	public static IntentCompilerInformationHolder getInstance() {

+		if (currentInstance == null) {

+			currentInstance = new IntentCompilerInformationHolder();

+		}

+		return currentInstance;

+	}

+

+	/**

+	 * Initialize this IntentCompilerInformationHolder by clearing all informations.

+	 */

+	public void initialize() {

+		informationHolder = CompilerFactory.eINSTANCE.createCompilationInformationHolder();

+

+		if (statusManager == null) {

+			statusManager = CompilerFactory.eINSTANCE.createCompilationStatusManager();

+		} else {

+			statusManager.getCompilationStatusList().clear();

+			statusManager.getModelingUnitToStatusList().clear();

+		}

+	}

+

+	public CompilationStatusManager getStatusManager() {

+		return statusManager;

+	}

+

+	/**

+	 * Add the given element to the current created element list.

+	 * 

+	 * @param instruction

+	 *            the instruction that declared this element

+	 * @param createdElement

+	 *            the element to register

+	 */

+	private void addCreatedElementsToCurrentList(UnitInstruction instruction, EObject createdElement) {

+		if (createdElement != null) {

+			this.getCurrentCreatedElements().add(createdElement);

+			this.informationHolder.getCreatedElementsToInstructions().put(createdElement, instruction);

+		}

+	}

+

+	/**

+	 * Returns the instruction that declared the given element.

+	 * 

+	 * @param createdElement

+	 *            the element to inspect

+	 * @return the instruction that declared the given element

+	 */

+	public UnitInstruction getInstructionByCreatedElement(EObject createdElement) {

+		return this.informationHolder.getCreatedElementsToInstructions().get(createdElement);

+	}

+

+	/**

+	 * Returns the object associated to the given name (used for resolving reference).

+	 * 

+	 * @param type

+	 *            the type of the researched element.

+	 * @param name

+	 *            Name of the searched object.

+	 * @return the object associated to the given name

+	 */

+	public Object getCreatedInstanceByName(EClassifier type, String name) {

+		Object createdInstance = null;

+		if (type != null) {

+			return this.informationHolder.getTypeToNameToElementsMap().get(type).getNameToElement().get(name);

+		} else {

+			// If type is null we search this instance for any type

+			for (EClassifier possibleType : this.informationHolder.getTypeToNameToElementsMap().keySet()) {

+				createdInstance = this.informationHolder.getTypeToNameToElementsMap().get(possibleType)

+						.getNameToElement().get(name);

+				if (createdInstance != null) {

+					break;

+				}

+			}

+			return createdInstance;

+		}

+	}

+

+	/**

+	 * Add the given generated element to the given resource's content list.

+	 * 

+	 * @param resource

+	 *            the resource to map with the given element

+	 * @param newContainedElement

+	 *            the element to map with the given resource

+	 */

+	public void addResourceToGeneratedElementMapping(ResourceDeclaration resource, EObject newContainedElement) {

+		if (this.informationHolder.getResourceToContainedElements().get(resource) == null) {

+			this.informationHolder.getResourceToContainedElements().put(resource, new BasicEList<EObject>());

+		}

+		this.informationHolder.getResourceToContainedElements().get(resource).add(newContainedElement);

+

+	}

+

+	/**

+	 * Returns the declared resources.

+	 * 

+	 * @return the declared resources.

+	 */

+	public Set<ResourceDeclaration> getDeclaredResources() {

+		return this.informationHolder.getResourceToContainedElements().keySet();

+	}

+

+	/**

+	 * Returns the given's resource content (generated elements).

+	 * 

+	 * @param resource

+	 *            the resource to inspect

+	 * @return the given's resource content (generated elements)

+	 */

+	public EList<EObject> getResourceContent(ResourceDeclaration resource) {

+		return this.informationHolder.getResourceToContainedElements().get(resource);

+	}

+

+	/**

+	 * Add to the unresolvedReference list of the given element the given referenceHolder.

+	 * 

+	 * @param generatedElement

+	 *            the element that contains the unresolved reference to add

+	 * @param referenceHolder

+	 *            the referenceHolder containing the feature containing the unresolved reference and the

+	 *            textual value of it

+	 */

+	public void addUnresolvedReference(EObject generatedElement, UnresolvedReferenceHolder referenceHolder) {

+		if (this.informationHolder.getElementToUnresolvedReferenceMap().get(generatedElement) == null) {

+			this.informationHolder.getElementToUnresolvedReferenceMap().put(generatedElement,

+					new BasicEList<UnresolvedReferenceHolder>());

+		}

+		this.informationHolder.getElementToUnresolvedReferenceMap().get(generatedElement)

+				.add(referenceHolder);

+	}

+

+	/**

+	 * Returns a list containing the unresolved references for the given element.

+	 * 

+	 * @param elementContainingUnresolvedReference

+	 *            the element to inspect

+	 * @return a list containing the unresolved references for the given element

+	 */

+	public EList<UnresolvedReferenceHolder> getUnresolvedReferencesByGeneratedElement(

+			EObject elementContainingUnresolvedReference) {

+		EList<UnresolvedReferenceHolder> unresolvedRefs = this.informationHolder

+				.getElementToUnresolvedReferenceMap().get(elementContainingUnresolvedReference);

+		if (unresolvedRefs == null) {

+			unresolvedRefs = new BasicEList<UnresolvedReferenceHolder>();

+		}

+		return unresolvedRefs;

+	}

+

+	/**

+	 * Sets the list of current imported packages (URIs form).

+	 * 

+	 * @param importedPackages

+	 *            the list of current imported packages (URIs form)

+	 */

+	public void setCurrentImportedPackages(List<String> importedPackages) {

+		this.currentImportedPackages = importedPackages;

+	}

+

+	/**

+	 * Returns the list of current imported packages (URIs form).

+	 * 

+	 * @return the list of current imported packages (URIs form)

+	 */

+	public List<String> getCurrentImportedPackages() {

+		return currentImportedPackages;

+	}

+

+	public List<EObject> getCurrentCreatedElements() {

+		return this.informationHolder.getCurrentGeneratedElementList();

+	}

+

+	/**

+	 * Try to add the given createdElement identified by the given name ; throws an exception if an element

+	 * has already been registered with this name.

+	 * 

+	 * @param name

+	 *            name (identifier) of the element to register

+	 * @param createdElement

+	 *            the createdElement

+	 * @param instruction

+	 *            the instruction that declared this element

+	 */

+	public void addNameToCreatedElementEntry(String name, EObject createdElement,

+			InstanciationInstruction instruction) {

+

+		// If an element has already been registered with this name

+		if (this.getNameToCreatedElement().get(name) != null) {

+			throw new InvalidValueException(instruction, "The name " + name

+					+ " has already been used to identify an element.");

+		}

+

+		// Otherwise, we register the given element

+		if (this.getNameToCreatedElement().get(createdElement.eClass()) == null) {

+			this.getNameToCreatedElement().put(createdElement.eClass(),

+					CompilerFactory.eINSTANCE.createStringToEObjectMap());

+		}

+		this.getNameToCreatedElement().get(createdElement.eClass()).getNameToElement()

+				.put(name, createdElement);

+		this.addCreatedElementsToCurrentList(instruction, createdElement);

+

+		// If there were unresolved contribution instructions associated to this element

+		// if (this.informationHolder.getUnresolvedContributions().get(name) != null) {

+		// this.informationHolder.getUnresolvedContributions().get(name).setResolved(true);

+		// }

+	}

+

+	public boolean isUnresolvedContribution(ContributionInstruction contributionInstruction) {

+		boolean isUnresolved = this.informationHolder.getUnresolvedContributions().get(

+				contributionInstruction.getReferencedElement().getIntentHref()) == null;

+		if (!isUnresolved) {

+			isUnresolved = true;

+			for (UnresolvedContributionHolder holder : this.informationHolder.getUnresolvedContributions()

+					.get(contributionInstruction.getReferencedElement().getIntentHref())) {

+				if (holder.getReferencedContribution() == contributionInstruction) {

+					isUnresolved = isUnresolved && !holder.isResolved();

+				}

+			}

+		}

+		return isUnresolved;

+	}

+

+	public EList<UnresolvedContributionHolder> getContributionsAssociatedTo(String contributedElementName) {

+		if (this.informationHolder.getUnresolvedContributions().get(contributedElementName) != null) {

+			return new BasicEList<UnresolvedContributionHolder>(this.informationHolder

+					.getUnresolvedContributions().get(contributedElementName));

+

+		}

+		return new BasicEList<UnresolvedContributionHolder>();

+	}

+

+	/**

+	 * Return the list of unresolved contribution instructions for the element with the given name.

+	 * 

+	 * @param contributedElementName

+	 *            the name of the element that is associated with unresolved contribution exceptions.

+	 * @return the list of unresolved contribution instructions for the element with the given name

+	 */

+	public EList<UnresolvedContributionHolder> getUnresolvedContributions(String contributedElementName) {

+

+		if (this.informationHolder.getUnresolvedContributions().get(contributedElementName) != null) {

+			return this.informationHolder.getUnresolvedContributions().get(contributedElementName);

+		}

+		return new BasicEList<UnresolvedContributionHolder>();

+	}

+

+	/**

+	 * Returns the textual reference that remained unresolved for contribution instructions.

+	 * 

+	 * @return the textual reference that remained unresolved for contribution instructions

+	 */

+	public Set<String> getAllUnresolvedContributionsNames() {

+		return this.informationHolder.getUnresolvedContributions().keySet();

+	}

+

+	/**

+	 * Returns a map associating created elements to their names and sorted by the elements type.

+	 * 

+	 * @return a map associating created elements to their names and sorted by the elements type

+	 */

+	private EMap<EClassifier, StringToEObjectMap> getNameToCreatedElement() {

+		return this.informationHolder.getTypeToNameToElementsMap();

+	}

+

+	/**

+	 * returns the validation informations related to the createdElements.

+	 * 

+	 * @return a mapping between ModelingUnits and the validation informations related to the createdElements

+	 */

+	public EList<CompilationStatus> getCompilationStatusList() {

+		return this.statusManager.getCompilationStatusList();

+	}

+

+	/**

+	 * Registers the given compilationException as a new CompilationStatus.

+	 * 

+	 * @param compilationException

+	 *            the compilation Exception to register

+	 */

+	public void registerCompilationExceptionAsCompilationStatus(CompilationException compilationException) {

+

+		EList<CompilationStatus> compilationStatusList = new BasicEList<CompilationStatus>();

+

+		// Step 1 : we convert each the CompilationException in a CompilationStatus

+		CompilationStatus newStatus = CompilerFactory.eINSTANCE.createCompilationStatus();

+		newStatus.setMessage(compilationException.getMessage());

+		newStatus.setSeverity(CompilationStatusConverter

+				.createStatusSeverityFromCompilationExceptionErrorType(compilationException.getType()));

+		newStatus.setType(CompilationStatusConverter

+				.createStatusTypeFromCompilationExceptionErrorType(compilationException.getType()));

+		newStatus.setTarget(compilationException.getInvalidInstruction());

+

+		// and add this status to the diagnostic list.

+		compilationStatusList.add(newStatus);

+

+		// Step 2 : we register the new Diagnostics in the informationHolder

+		addStatusListToInformationHolder(

+				getModelingUnitForInstruction(compilationException.getInvalidInstruction()),

+				compilationStatusList);

+	}

+

+	/**

+	 * Register the given diagnostic for the given generatedElement as a new CompilationStatus.

+	 * 

+	 * @param generatedElement

+	 *            the generatedElement containing diagnostic errors

+	 * @param diagnostic

+	 *            the diagnostic to register

+	 */

+	public void registerDiagnosticAsCompilationStatusList(EObject generatedElement, Diagnostic diagnostic) {

+		EList<CompilationStatus> compilationStatusList = new BasicEList<CompilationStatus>();

+		for (Diagnostic subDiagnostic : diagnostic.getChildren()) {

+			// Step 1 : we convert each sub-diagnostic in a CompilationStatus

+			CompilationStatus newStatus = CompilerFactory.eINSTANCE.createCompilationStatus();

+			newStatus.setMessage(subDiagnostic.getMessage());

+			newStatus.setSeverity(CompilationStatusConverter

+					.createStatusSeverityFromDiagnosticSeverity(subDiagnostic));

+			newStatus.setType(CompilationMessageType.VALIDATION_ERROR);

+			newStatus.setTarget(this.getInstructionByCreatedElement(generatedElement));

+

+			// and add this status to the diagnostic list.

+			compilationStatusList.add(newStatus);

+		}

+

+		// Step 2 : we register the new Diagnostics in the informationHolder

+		addStatusListToInformationHolder(

+				getModelingUnitForInstruction(getInstructionByCreatedElement(generatedElement)),

+				compilationStatusList);

+

+	}

+

+	/**

+	 * Adds the given list of compilation status to the global status list and the map

+	 * ModelingUnitToStatusList.

+	 * 

+	 * @param unit

+	 *            the modeling unit containing the given status list

+	 * @param compilationStatusList

+	 *            the list of status to add

+	 */

+	private void addStatusListToInformationHolder(ModelingUnit unit,

+			EList<CompilationStatus> compilationStatusList) {

+

+		// First in the general Status List

+		this.statusManager.getCompilationStatusList().addAll(compilationStatusList);

+

+		// Then in the ModelingUnit to StatusList map.

+		if (this.statusManager.getModelingUnitToStatusList().get(unit) == null) {

+			this.statusManager.getModelingUnitToStatusList().put(unit, new BasicEList<CompilationStatus>());

+		}

+		this.statusManager.getModelingUnitToStatusList().get(unit).addAll(compilationStatusList);

+	}

+

+	/**

+	 * Returns the modeling unit associated to the given instruction.

+	 * 

+	 * @param instruction

+	 *            the instruction to inspect

+	 * @return the modeling unit associated to the given instruction

+	 */

+	private ModelingUnit getModelingUnitForInstruction(UnitInstruction instruction) {

+		ModelingUnit foundModelingUnit = (ModelingUnit)instruction.getUnit();

+		UnitInstruction parentInstruction = instruction;

+

+		while (foundModelingUnit == null) {

+			parentInstruction = (UnitInstruction)parentInstruction.eContainer();

+			if (parentInstruction != null) {

+				foundModelingUnit = (ModelingUnit)parentInstruction.getUnit();

+			} else {

+				foundModelingUnit = null;

+			}

+		}

+		return foundModelingUnit;

+	}

+

+	/**

+	 * Add to the mapping between textual reference and contribution instructions the given contribution

+	 * instruction.

+	 * 

+	 * @param instanceTextualReference

+	 *            The textual reference to the contributed instance

+	 * @param contributionInstruction

+	 *            the contribution instruction to add to the unresolvedCOntribution.

+	 */

+	public void addUnresolvedContribution(String instanceTextualReference,

+			ContributionInstruction contributionInstruction) {

+		if (this.informationHolder.getUnresolvedContributions().get(instanceTextualReference) == null) {

+			this.informationHolder.getUnresolvedContributions().put(instanceTextualReference,

+					new BasicEList<UnresolvedContributionHolder>());

+		}

+

+		if (!isRegisteredUnresolvedContribution(contributionInstruction)) {

+			UnresolvedContributionHolder holder = CompilerFactory.eINSTANCE

+					.createUnresolvedContributionHolder();

+			holder.setResolved(false);

+			holder.setReferencedContribution(contributionInstruction);

+

+			this.informationHolder.getUnresolvedContributions().get(instanceTextualReference).add(holder);

+		}

+	}

+

+	public boolean isRegisteredUnresolvedContribution(ContributionInstruction contributionInstruction) {

+		boolean isRegistered = false;

+		for (UnresolvedContributionHolder holder : this.informationHolder.getUnresolvedContributions().get(

+				contributionInstruction.getReferencedElement().getIntentHref())) {

+			isRegistered = isRegistered || (holder.getReferencedContribution() == contributionInstruction);

+		}

+		return isRegistered;

+	}

+

+	/**

+	 * Sets the given contribution instruction as resolved (i.e. remove it from its

+	 * unresolvedContributionHolder) ; if the unresolvedContributionHolder associated to the textual reference

+	 * is empty, we remove it from the map.

+	 * 

+	 * @param contributionInstruction

+	 *            the contributionInstruction to consider as resolved.

+	 */

+	public void setContributionInstructionAsResolved(ContributionInstruction contributionInstruction) {

+

+		for (UnresolvedContributionHolder holder : informationHolder.getUnresolvedContributions().get(

+				contributionInstruction.getReferencedElement().getIntentHref())) {

+

+			if (holder.getReferencedContribution() == contributionInstruction) {

+				holder.setResolved(true);

+			}

+		}

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/validator/GeneratedElementValidator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/validator/GeneratedElementValidator.java
new file mode 100644
index 0000000..1137898
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/validator/GeneratedElementValidator.java
@@ -0,0 +1,84 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.validator;

+

+import java.util.HashMap;

+import java.util.Map;

+

+import org.eclipse.emf.common.util.Diagnostic;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EValidator;

+import org.eclipse.emf.ecore.util.Diagnostician;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.CompilationException;

+import org.eclipse.mylyn.docs.intent.client.compiler.errors.ValidationException;

+import org.eclipse.mylyn.docs.intent.core.genericunit.UnitInstruction;

+

+/**

+ * Class used to handle the validation of a generated object.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class GeneratedElementValidator {

+

+	/**

+	 * The generated element to validate.

+	 */

+	private EObject elementToValidate;

+

+	/**

+	 * The instruction that declared this element.

+	 */

+	private UnitInstruction instruction;

+

+	/**

+	 * GeneratedElementValidator constructor.

+	 * 

+	 * @param instruction

+	 *            the instruction that define the generated element

+	 * @param generatedElement

+	 *            the generated element to validate

+	 */

+	public GeneratedElementValidator(UnitInstruction instruction, EObject generatedElement) {

+		this.instruction = instruction;

+		this.elementToValidate = generatedElement;

+

+	}

+

+	/**

+	 * Validate the generated element and returns the diagnostic ; throws a ValidationException if the

+	 * validation failed.

+	 * 

+	 * @return the diagnostic of the generated element

+	 * @throws CompilationException

+	 *             if the diagnostic contains elements with high severity

+	 */

+	public Diagnostic validate() throws CompilationException {

+

+		EValidator validator = EValidator.Registry.INSTANCE.getEValidator(elementToValidate.eClass()

+				.getEPackage());

+		Map<Object, Object> contextEntries = new HashMap<Object, Object>();

+		contextEntries.put(EValidator.SubstitutionLabelProvider.class, new LabelProviderForValidator());

+		Diagnostic diagnostic = null;

+		try {

+			diagnostic = Diagnostician.INSTANCE.validate(elementToValidate, contextEntries);

+			// If the diagnostic's severity is more than a simple warning

+			if (diagnostic.getSeverity() > 0) {

+				throw new ValidationException(instruction, ValidationException.getErrorMessageFrom(

+						elementToValidate, diagnostic));

+			}

+		} catch (NullPointerException npe) {

+			throw new ValidationException(instruction,

+					"An unexpected error occured during validation of this element.");

+		}

+

+		return diagnostic;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/validator/LabelProviderForValidator.java b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/validator/LabelProviderForValidator.java
new file mode 100644
index 0000000..a3829ee
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.compiler/src/org/eclipse/mylyn/docs/intent/client/compiler/validator/LabelProviderForValidator.java
@@ -0,0 +1,79 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.compiler.validator;

+

+import org.eclipse.emf.ecore.EAttribute;

+import org.eclipse.emf.ecore.EDataType;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.emf.ecore.EValidator;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+

+/**

+ * Label Provider used to create clear validation messages.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class LabelProviderForValidator implements EValidator.SubstitutionLabelProvider {

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.emf.ecore.EValidator.SubstitutionLabelProvider#getObjectLabel(org.eclipse.emf.ecore.EObject)

+	 */

+	public String getObjectLabel(EObject eObject) {

+		String returnedLabel = eObject.eClass().getName();

+		String idLabel = null;

+		String nameLabel = null;

+		// If the element has an ID attribute of type EString

+		// or a "name" attribute of type EString, on return the value of this attribute

+		// By default, we return the name of its eClass.

+		for (EAttribute attribute : eObject.eClass().getEAllAttributes()) {

+			if (attribute.isID() && "EString".equals(attribute.getEAttributeType().getName())) {

+				idLabel = (String)eObject.eGet(attribute);

+			}

+

+			if ("name".equals(attribute.getName())

+					&& "EString".equals(attribute.getEAttributeType().getName())) {

+				nameLabel = (String)eObject.eGet(attribute);

+			}

+		}

+

+		if (idLabel != null) {

+			returnedLabel = idLabel;

+		} else {

+			if (nameLabel != null) {

+				returnedLabel = nameLabel;

+			}

+		}

+		return returnedLabel;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.emf.ecore.EValidator.SubstitutionLabelProvider#getFeatureLabel(org.eclipse.emf.ecore.EStructuralFeature)

+	 */

+	public String getFeatureLabel(EStructuralFeature eStructuralFeature) {

+		return eStructuralFeature.getName();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.emf.ecore.EValidator.SubstitutionLabelProvider#getValueLabel(org.eclipse.emf.ecore.EDataType,

+	 *      java.lang.Object)

+	 */

+	public String getValueLabel(EDataType eDataType, Object value) {

+		return EcoreUtil.convertToString(eDataType, value);

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.checkstyle b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.checkstyle
new file mode 100644
index 0000000..bf5fe67
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.checkstyle
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fileset-config file-format-version="1.2.0" simple-config="true">
+    <local-check-config name="Intent" location="/org.eclipse.mylyn.docs.intent/style/checkstyleConfiguration.xml" type="project" description="">
+        <additional-data name="protect-config-file" value="false"/>
+    </local-check-config>
+    <fileset name="tous" enabled="true" check-config-name="Intent" local="true">
+        <file-match-pattern match-pattern="." include-pattern="true"/>
+    </fileset>
+</fileset-config>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.classpath b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.project b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.project
new file mode 100644
index 0000000..147c177
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.mylyn.docs.intent.client.indexer</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5b30070
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Mon Jul 26 14:09:43 CEST 2010

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/META-INF/MANIFEST.MF b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..0688745
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.mylyn.docs.intent.client.indexer
+Bundle-Version: 0.7.0.qualifier
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.mylyn.docs.intent.core,
+ org.eclipse.mylyn.docs.intent.collab,
+ org.eclipse.mylyn.docs.intent.collab.common
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.mylyn.docs.intent.client.indexer,
+ org.eclipse.mylyn.docs.intent.client.indexer.launcher
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/about.html b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/about.html
new file mode 100644
index 0000000..34ab520
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/about.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml"> 

+<head> 

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

+<title>Eclipse Foundation Software User Agreement</title> 

+</head> 

+ 

+<body lang="EN-US"> 

+<h2>Eclipse Foundation Software User Agreement</h2> 

+<p>April 14, 2010</p> 

+ 

+<h3>Usage Of Content</h3> 

+ 

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p> 

+ 

+<h3>Applicable Licenses</h3> 

+ 

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p> 

+ 

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p> 

+ 

+<ul> 

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li> 

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li> 

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li> 

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li> 

+</ul> 

+ 

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p> 

+ 

+<ul> 

+       <li>The top-level (root) directory</li> 

+       <li>Plug-in and Fragment directories</li> 

+       <li>Inside Plug-ins and Fragments packaged as JARs</li> 

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li> 

+       <li>Feature directories</li> 

+</ul> 

+ 

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p> 

+ 

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p> 

+ 

+<ul> 

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li> 

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li> 

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li> 

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li> 

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li> 

+</ul> 

+ 

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p> 

+ 

+ 

+<h3>Use of Provisioning Technology</h3> 

+ 

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a 

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a> 

+   (&quot;Specification&quot;).</p> 

+ 

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p> 

+ 

+<ol> 

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li> 

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li> 

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li> 

+</ol> 

+ 

+<h3>Cryptography</h3> 

+ 

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p> 

+ 

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p> 

+</body> 

+</html> 
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/build.properties b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/build.properties
new file mode 100644
index 0000000..6a10ff2
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/build.properties
@@ -0,0 +1,17 @@
+################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+################################################################################

+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               about.html,\

+               plugin.properties

+src.includes = about.html

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/plugin.properties b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/plugin.properties
new file mode 100644
index 0000000..db4c9d5
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/plugin.properties
@@ -0,0 +1,12 @@
+#################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+#################################################################################

+pluginName = Intent Indexer Client

+providerName = Eclipse Mylyn
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/IndexerRepositoryClient.java b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/IndexerRepositoryClient.java
new file mode 100644
index 0000000..de7f7b2
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/IndexerRepositoryClient.java
@@ -0,0 +1,135 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.indexer;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.client.indexer.tocmaker.TocMaker;

+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.SaveException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocument;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerFactory;

+

+/**

+ * When notified about modifications on the listened elements, update the index.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class IndexerRepositoryClient implements RepositoryClient {

+

+	/**

+	 * Entity used to compute index from a IntentDocument.

+	 */

+	private TocMaker indexComputor;

+

+	/**

+	 * The repositoryObjectHandler notifying this indexer about any modifications on the document.

+	 */

+	private RepositoryObjectHandler repositoryObjectHandler;

+

+	/**

+	 * Indexer constructor.

+	 */

+	public IndexerRepositoryClient() {

+		indexComputor = new TocMaker();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#addRepositoryObjectHandler(org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler)

+	 */

+	public void addRepositoryObjectHandler(RepositoryObjectHandler handler) {

+		handler.addClient(this);

+		this.repositoryObjectHandler = handler;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#removeRepositoryObjectHandler(org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler)

+	 */

+	public void removeRepositoryObjectHandler(RepositoryObjectHandler handler) {

+		handler.removeClient(this);

+		this.repositoryObjectHandler = null;

+

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#handleChangeNotification(org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification)

+	 */

+	public void handleChangeNotification(RepositoryChangeNotification notification) {

+		System.out.println("[Index] Detected changes...");

+		try {

+			repositoryObjectHandler.getRepositoryAdapter().openSaveContext();

+			makeToc();

+			repositoryObjectHandler.getRepositoryAdapter().save();

+		} catch (SaveException e) {

+			try {

+				repositoryObjectHandler.getRepositoryAdapter().undo();

+			} catch (ReadOnlyException e1) {

+				// TODO we can't do anything here

+			}

+		} catch (ReadOnlyException e) {

+			// TODO we can't do anything here

+		}

+		repositoryObjectHandler.getRepositoryAdapter().closeContext();

+

+	}

+

+	/**

+	 * Replace the repository index content with the repository document's table of contents.

+	 */

+	public void makeToc() {

+		IntentIndex index = getIntentIndex();

+		IntentDocument document = getIntentDocument();

+		System.out.println("[Indexer] Making Toc on " + document.getChapters().size() + "chapters...");

+

+		indexComputor.computeIndex(index, document);

+		System.out.println("[Indexer] Toc made.");

+	}

+

+	/**

+	 * Returns the IntentIndex stored on the repository.

+	 * 

+	 * @return the IntentIndex stored on the repository

+	 */

+	private IntentIndex getIntentIndex() {

+		Resource indexResource = repositoryObjectHandler.getRepositoryAdapter().getResource(

+				IntentLocations.GENERAL_INDEX_PATH);

+		if (indexResource.getContents().isEmpty()) {

+			indexResource.getContents().add(IntentIndexerFactory.eINSTANCE.createIntentIndex());

+		}

+		return (IntentIndex)indexResource.getContents().get(0);

+	}

+

+	/**

+	 * Returns the IntentDocument stored on the repository.

+	 * 

+	 * @return the IntentDocument stored on the repository

+	 */

+	private IntentDocument getIntentDocument() {

+		Resource indexResource = repositoryObjectHandler.getRepositoryAdapter().getResource(

+				IntentLocations.INTENT_INDEX);

+		if ((indexResource.getContents().size() > 0)

+				&& ((indexResource.getContents().get(0) instanceof IntentDocument))) {

+			return (IntentDocument)indexResource.getContents().get(0);

+		}

+		return null;

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/launcher/IndexerCreator.java b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/launcher/IndexerCreator.java
new file mode 100644
index 0000000..a0ddc7d
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/launcher/IndexerCreator.java
@@ -0,0 +1,77 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.indexer.launcher;

+

+import java.util.HashSet;

+import java.util.Set;

+

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.mylyn.docs.intent.client.indexer.IndexerRepositoryClient;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.ReadWriteRepositoryObjectHandlerImpl;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.typeListener.TypeNotificator;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.Notificator;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.collab.utils.RepositoryCreatorHolder;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;

+

+/**

+ * Creates a new Indexer client listening for any changes on the given document.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class IndexerCreator {

+

+	/**

+	 * IndexerCreator constructor.

+	 */

+	private IndexerCreator() {

+

+	}

+

+	/**

+	 * Creates an Indexer client listening for any changes on the document stored on the given repository.

+	 * 

+	 * @param repository

+	 *            is the repository to index

+	 * @return an Indexer client listening for any changes on the document stored on the given repository

+	 * @throws RepositoryConnectionException

+	 *             if a connection to the given repository cannot be established

+	 */

+	public static IndexerRepositoryClient launchIndexer(Repository repository)

+			throws RepositoryConnectionException {

+

+		// Step 1 : adapter creation

+		final RepositoryAdapter repositoryAdapter = RepositoryCreatorHolder.getCreator()

+				.createRepositoryAdapterForRepository(repository);

+

+		// Step 2 : getting the Index to listen

+

+		// Step 3 : creating the handler

+		RepositoryObjectHandler handler = new ReadWriteRepositoryObjectHandlerImpl(repositoryAdapter);

+		Set<EStructuralFeature> listenedFeatures = new HashSet<EStructuralFeature>();

+		listenedFeatures.add(IntentDocumentPackage.eINSTANCE.getIntentDocument_Chapters());

+		listenedFeatures.add(IntentDocumentPackage.eINSTANCE.getIntentSubSectionContainer_SubSections());

+

+		Notificator listenedElementsNotificator = new TypeNotificator(listenedFeatures);

+		handler.setNotificator(listenedElementsNotificator);

+

+		// Step 4 : launching the indexer

+

+		IndexerRepositoryClient indexer = new IndexerRepositoryClient();

+		indexer.addRepositoryObjectHandler(handler);

+

+		return indexer;

+

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/repositoryconnection/HandlerCreator.java b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/repositoryconnection/HandlerCreator.java
new file mode 100644
index 0000000..c681f05
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/repositoryconnection/HandlerCreator.java
@@ -0,0 +1,66 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.indexer.repositoryconnection;

+

+import java.util.HashSet;

+import java.util.Set;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.ReadWriteRepositoryObjectHandlerImpl;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.elementList.ElementListAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.elementList.ElementListNotificator;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.Notificator;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.collab.utils.RepositoryCreatorHolder;

+

+/**

+ * Creates an handler notified of all changes made on the element at the given path.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class HandlerCreator {

+

+	/**

+	 * Creates an handler notified of all changes made on any element of the resource at the given path.

+	 * 

+	 * @param repository

+	 *            the repository containing the listened objects

+	 * @param pathToListenedResource

+	 *            the path of the listened resource

+	 * @return a new handler that will be notified of all changes made on the element at the given path

+	 * @throws RepositoryConnectionException

+	 *             if the connection to the given repository is invalid

+	 */

+	public RepositoryObjectHandler createHandler(String pathToListenedResource, Repository repository)

+			throws RepositoryConnectionException {

+		// We first create an adapter to get the resource to listen

+		RepositoryAdapter cdoAdapter = RepositoryCreatorHolder.getCreator()

+				.createRepositoryAdapterForRepository(repository);

+		cdoAdapter.openSaveContext();

+		Resource resourceFromPath = cdoAdapter.getResource(pathToListenedResource);

+

+		// We get the contained elements

+		Set<EObject> listenedElements = new HashSet<EObject>();

+		listenedElements.addAll(resourceFromPath.getContents());

+

+		// We create the handler

+		RepositoryObjectHandler elementHandler = new ReadWriteRepositoryObjectHandlerImpl(cdoAdapter);

+		ElementListAdapter adapter = new ElementListAdapter();

+		Notificator listenedElementsNotificator = new ElementListNotificator(listenedElements, adapter);

+		elementHandler.setNotificator(listenedElementsNotificator);

+

+		return elementHandler;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/tocmaker/TocMaker.java b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/tocmaker/TocMaker.java
new file mode 100644
index 0000000..19f3ccf
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/indexer/tocmaker/TocMaker.java
@@ -0,0 +1,125 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.indexer.tocmaker;

+

+import org.eclipse.mylyn.docs.intent.core.document.IntentChapter;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocument;

+import org.eclipse.mylyn.docs.intent.core.document.IntentSection;

+import org.eclipse.mylyn.docs.intent.core.document.IntentStructuredElement;

+import org.eclipse.mylyn.docs.intent.core.document.IntentSubSectionContainer;

+import org.eclipse.mylyn.docs.intent.core.indexer.INDEX_ENTRY_TYPE;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerFactory;

+import org.eclipse.mylyn.docs.intent.core.query.StructuredElementHelper;

+

+/**

+ * Entity used to make the index (table of content) of an Intent document.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class TocMaker {

+

+	/**

+	 * Replace the given index content with the given document's table of contents.

+	 * 

+	 * @param index

+	 *            the index to update

+	 * @param document

+	 *            the Intent document

+	 */

+	public void computeIndex(IntentIndex index, IntentDocument document) {

+		index.getEntries().clear();

+		IntentIndexEntry entry = IntentIndexerFactory.eINSTANCE.createIntentIndexEntry();

+		String title = StructuredElementHelper.getTitle(document);

+		if ((title == null) || (title.length() < 1)) {

+			title = "Document";

+		}

+		entry.setName(title);

+		entry.setReferencedElement(document);

+		entry.setType(INDEX_ENTRY_TYPE.INTENT_DOCUMENT);

+		for (IntentChapter chapter : document.getChapters()) {

+			entry.getSubEntries().add(computeEntryForChapter(chapter));

+		}

+		index.getEntries().add(entry);

+	}

+

+	/**

+	 * Returns the IndexEntry describing the given chapter's table of contents.

+	 * 

+	 * @param chapter

+	 *            the chapter to consider

+	 * @return the entry corresponding to the given chapter's toc

+	 */

+	private IntentIndexEntry computeEntryForChapter(IntentChapter chapter) {

+		IntentIndexEntry entry = IntentIndexerFactory.eINSTANCE.createIntentIndexEntry();

+		String chapterIndex = getIndex(chapter);

+		String title = StructuredElementHelper.getTitle(chapter);

+		if ((title == null) || (title.length() < 1)) {

+			title = "Unitled Chapter";

+		}

+		entry.setName(chapterIndex + " " + title);

+		entry.setReferencedElement(chapter);

+		entry.setType(INDEX_ENTRY_TYPE.INTENT_CHAPTER);

+

+		for (IntentSection section : chapter.getSubSections()) {

+			entry.getSubEntries().add(computeEntryForSection(chapterIndex, section));

+		}

+		return entry;

+

+	}

+

+	/**

+	 * Returns the index for this element (for example 1.2.3).

+	 * 

+	 * @param element

+	 *            a structured element

+	 * @return the index of this element

+	 */

+	private String getIndex(IntentStructuredElement element) {

+		int positionInContainer = 0;

+		if (element.eContainer() instanceof IntentDocument) {

+			positionInContainer = element.eContainer().eContents().indexOf(element) + 1;

+		} else {

+			if (element.eContainer() instanceof IntentSubSectionContainer) {

+				positionInContainer = ((IntentSubSectionContainer)element.eContainer()).getSubSections()

+						.indexOf(element) + 1;

+			}

+		}

+		return Integer.toString(positionInContainer) + ".";

+	}

+

+	/**

+	 * Returns the IndexEntry describing the given section's table of contents.

+	 * 

+	 * @param chapterIndex

+	 *            index of the chapter containing this section

+	 * @param section

+	 *            the section to consider

+	 * @return the entry corresponding to the given chapter's toc

+	 */

+	private IntentIndexEntry computeEntryForSection(String chapterIndex, IntentSection section) {

+		IntentIndexEntry entry = IntentIndexerFactory.eINSTANCE.createIntentIndexEntry();

+		String sectionIndex = chapterIndex + getIndex(section);

+		String title = StructuredElementHelper.getTitle(section);

+		if ((title == null) || (title.length() < 1)) {

+			title = "Untitled Section";

+		}

+		entry.setName(sectionIndex + " " + title);

+		entry.setReferencedElement(section);

+		entry.setType(INDEX_ENTRY_TYPE.INTENT_SECTION);

+

+		for (IntentSection subSection : section.getSubSections()) {

+			entry.getSubEntries().add(computeEntryForSection(sectionIndex, subSection));

+		}

+		return entry;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/settings/IntentRepositoryConnectionSettingsForIndexer.java b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/settings/IntentRepositoryConnectionSettingsForIndexer.java
new file mode 100644
index 0000000..5dd4324
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.indexer/src/org/eclipse/mylyn/docs/intent/client/settings/IntentRepositoryConnectionSettingsForIndexer.java
@@ -0,0 +1,35 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.settings;

+

+/**

+ * Define the setting for connecting to the repository.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public interface IntentRepositoryConnectionSettingsForIndexer {

+

+	/**

+	 * Address of the machine hosting the repository (for example : localhost or 192.33.33.33).

+	 */

+	String REPOSITORY_HOST_ADRESS = "192.168.30.118";

+

+	/**

+	 * Complete adress of the repository : host adress ':' [port of the repository].

+	 */

+	String REPOSITORY_COMPLETE_ADRESS = REPOSITORY_HOST_ADRESS + ":2036";

+

+	/**

+	 * Name of the repository to connect on.

+	 */

+	String REPOSITORY_NAME = "repo1";

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.checkstyle b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.checkstyle
new file mode 100644
index 0000000..bf5fe67
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.checkstyle
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fileset-config file-format-version="1.2.0" simple-config="true">
+    <local-check-config name="Intent" location="/org.eclipse.mylyn.docs.intent/style/checkstyleConfiguration.xml" type="project" description="">
+        <additional-data name="protect-config-file" value="false"/>
+    </local-check-config>
+    <fileset name="tous" enabled="true" check-config-name="Intent" local="true">
+        <file-match-pattern match-pattern="." include-pattern="true"/>
+    </fileset>
+</fileset-config>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.classpath b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.project b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.project
new file mode 100644
index 0000000..ab97e49
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.mylyn.docs.intent.client.synchronizer</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>

+		<nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..66b03c4
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Aug 04 11:12:37 CEST 2010

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/META-INF/MANIFEST.MF b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..604045f
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.mylyn.docs.intent.client.synchronizer
+Bundle-Version: 0.7.0.qualifier
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.emf.common;bundle-version="2.6.0",
+ org.eclipse.emf.ecore;bundle-version="2.6.0",
+ org.eclipse.mylyn.docs.intent.core,
+ org.eclipse.mylyn.docs.intent.collab,
+ org.eclipse.mylyn.docs.intent.collab.common,
+ org.eclipse.emf.compare.match;bundle-version="1.1.0",
+ org.eclipse.emf.edit.ui;bundle-version="2.6.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.mylyn.docs.intent.client.synchronizer,
+ org.eclipse.mylyn.docs.intent.client.synchronizer.launcher,
+ org.eclipse.mylyn.docs.intent.client.synchronizer.listeners
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/about.html b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/about.html
new file mode 100644
index 0000000..34ab520
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/about.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml"> 

+<head> 

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

+<title>Eclipse Foundation Software User Agreement</title> 

+</head> 

+ 

+<body lang="EN-US"> 

+<h2>Eclipse Foundation Software User Agreement</h2> 

+<p>April 14, 2010</p> 

+ 

+<h3>Usage Of Content</h3> 

+ 

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p> 

+ 

+<h3>Applicable Licenses</h3> 

+ 

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p> 

+ 

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p> 

+ 

+<ul> 

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li> 

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li> 

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li> 

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li> 

+</ul> 

+ 

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p> 

+ 

+<ul> 

+       <li>The top-level (root) directory</li> 

+       <li>Plug-in and Fragment directories</li> 

+       <li>Inside Plug-ins and Fragments packaged as JARs</li> 

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li> 

+       <li>Feature directories</li> 

+</ul> 

+ 

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p> 

+ 

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p> 

+ 

+<ul> 

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li> 

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li> 

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li> 

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li> 

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li> 

+</ul> 

+ 

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p> 

+ 

+ 

+<h3>Use of Provisioning Technology</h3> 

+ 

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a 

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a> 

+   (&quot;Specification&quot;).</p> 

+ 

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p> 

+ 

+<ol> 

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li> 

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li> 

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li> 

+</ol> 

+ 

+<h3>Cryptography</h3> 

+ 

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p> 

+ 

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p> 

+</body> 

+</html> 
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/build.properties b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/build.properties
new file mode 100644
index 0000000..6a10ff2
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/build.properties
@@ -0,0 +1,17 @@
+################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+################################################################################

+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               about.html,\

+               plugin.properties

+src.includes = about.html

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/plugin.properties b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/plugin.properties
new file mode 100644
index 0000000..9b4ad61
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/plugin.properties
@@ -0,0 +1,12 @@
+#################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+#################################################################################

+pluginName = Intent Synchronizer Client

+providerName = Eclipse Mylyn
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizerRepositoryClient.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizerRepositoryClient.java
new file mode 100644
index 0000000..615483d
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/SynchronizerRepositoryClient.java
@@ -0,0 +1,182 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Iterator;

+

+import org.eclipse.emf.common.util.BasicMonitor;

+import org.eclipse.emf.common.util.Monitor;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.synchronizer.IntentSynchronizer;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.SaveException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndex;

+

+/**

+ * In charge of communication between the repository and the synchronizer ; launch a synchronization operation

+ * each time a modification on the compiler's generated elements index is detected.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class SynchronizerRepositoryClient implements RepositoryClient {

+

+	/**

+	 * The repository Object Handler to use for receiving notification.

+	 */

+	private RepositoryObjectHandler repositoryObjectHandler;

+

+	/**

+	 * The synchronizer to use.

+	 */

+	private IntentSynchronizer synchronizer;

+

+	/**

+	 * The listened TraceAbilityIndex.

+	 */

+	private TraceabilityIndex traceabilityIndex;

+

+	/**

+	 * The progress Monitor to use for canceling a synchronization operation.

+	 */

+	private Monitor progressMonitor;

+

+	/**

+	 * SynchronizerRepositoryClient constructor.

+	 * 

+	 * @param traceabilityIndex

+	 *            the listened TraceAbilityIndex

+	 * @param progressMonitor

+	 *            the progress Monitor to use for canceling a synchronization operation

+	 */

+	public SynchronizerRepositoryClient(TraceabilityIndex traceabilityIndex, Monitor progressMonitor) {

+		System.out.println("[Synchronizer] Initialised.");

+		this.synchronizer = new IntentSynchronizer();

+		this.traceabilityIndex = traceabilityIndex;

+		this.progressMonitor = progressMonitor;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#addRepositoryObjectHandler(org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler)

+	 */

+	public void addRepositoryObjectHandler(RepositoryObjectHandler handler) {

+		handler.addClient(this);

+		repositoryObjectHandler = handler;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#removeRepositoryObjectHandler(org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler)

+	 */

+	public void removeRepositoryObjectHandler(RepositoryObjectHandler handler) {

+		handler.removeClient(this);

+		repositoryObjectHandler = null;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#handleChangeNotification(org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification)

+	 */

+	public void handleChangeNotification(RepositoryChangeNotification notification) {

+		// First we reload the index

+		this.traceabilityIndex = (TraceabilityIndex)repositoryObjectHandler.getRepositoryAdapter().reload(

+				this.traceabilityIndex);

+

+		// this.traceabilityIndex = (TraceabilityIndex)notification.getRightRoots().get(0);

+		System.out.println("[Synchroniser] Detected changes on the TraceabilityResourceIndex.");

+

+		// We cancel the previous operation

+		progressMonitor.setCanceled(true);

+

+		repositoryObjectHandler.getRepositoryAdapter().openSaveContext();

+

+		// We get all the compilation Status to add

+		progressMonitor = new BasicMonitor();

+		Collection<? extends CompilationStatus> statusList = new ArrayList<CompilationStatus>();

+		try {

+			statusList = synchronizer.synchronize(repositoryObjectHandler.getRepositoryAdapter(),

+					this.traceabilityIndex, progressMonitor);

+		} catch (InterruptedException e) {

+			// Nothing to do : it means that the operation has been canceled

+			System.out.println("[Synchronizer] Canceled.");

+		}

+

+		if (!progressMonitor.isCanceled()) {

+			addAllStatusToTargetElement(statusList);

+		}

+

+		if (!progressMonitor.isCanceled()) {

+			// We add these status to the targets Element

+			try {

+				repositoryObjectHandler.getRepositoryAdapter().save();

+			} catch (ReadOnlyException e) {

+				// As we have just opened a save context, we are sure that this will never happens

+			} catch (SaveException e) {

+				try {

+					repositoryObjectHandler.getRepositoryAdapter().undo();

+				} catch (ReadOnlyException e1) {

+					// As we have just opened a save context, we are sure that this will never happens

+				}

+			}

+			System.out.println("[Synchronizer] Done. Detected " + statusList.size()

+					+ " synchronization issues");

+		}

+		repositoryObjectHandler.getRepositoryAdapter().closeContext();

+

+	}

+

+	/**

+	 * Adds all the given compilationStatus to their targets instructions.

+	 * 

+	 * @param statusList

+	 *            the list of status to add

+	 */

+	public void addAllStatusToTargetElement(Collection<? extends CompilationStatus> statusList) {

+

+		// For each status to add

+		for (CompilationStatus status : statusList) {

+			// We first remove all the old synchronizer informations about this element (TODO should be done

+			// while compiling)

+			Iterator<CompilationStatus> iterator = status.getTarget().getCompilationStatus().iterator();

+			while (iterator.hasNext()) {

+				CompilationStatus next = iterator.next();

+				if (next.getType() == CompilationMessageType.SYNCHRONIZER_WARNING) {

+					iterator.remove();

+				}

+			}

+			// We get the status associated to this target

+			status.getTarget().getCompilationStatus().add(status);

+		}

+	}

+

+	/**

+	 * Sets the generatedElement listener, which will notify the Synchronizer if any generatedElement has

+	 * changed.

+	 * 

+	 * @param generatedElementListener

+	 *            the GeneratedElementListener

+	 */

+	public void setGeneratedElementListener(GeneratedElementListener generatedElementListener) {

+		this.synchronizer.setGeneratedElementListener(generatedElementListener);

+		generatedElementListener.setSynchronizer(this);

+

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchonizerEObjectNameGetter.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchonizerEObjectNameGetter.java
new file mode 100644
index 0000000..44f7b59
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchonizerEObjectNameGetter.java
@@ -0,0 +1,97 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.factory;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.common.notify.AdapterFactory;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;

+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;

+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

+

+/**

+ * Utility class providing access to eObjects textual description.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class SynchonizerEObjectNameGetter {

+

+	/**

+	 * Adapter factory instance. This contains all factories registered in the global registry.

+	 */

+	private static final ComposedAdapterFactory FACTORY = createAdapterFactory();

+

+	/** Label provider used to compute images and texts for the {@link EObject}s. */

+	private static AdapterFactoryLabelProvider labelProvider;

+

+	/**

+	 * SynchonizerEObjectNameGetter constructor.

+	 */

+	private SynchonizerEObjectNameGetter() {

+

+	}

+

+	/**

+	 * Computes the name of the given {@link EObject}.

+	 * 

+	 * @param eObject

+	 *            Object for which we need the name.

+	 * @return Name of the given {@link EObject}.

+	 */

+	public static String computeObjectName(EObject eObject) {

+		String objectName = null;

+		try {

+			objectName = getLabelProvider().getText(eObject);

+		} catch (IllegalArgumentException e) {

+			objectName = null;

+		}

+		if (objectName == null || "".equals(objectName)) { //$NON-NLS-1$

+			objectName = "untitled " + eObject.eClass().getName(); //$NON-NLS-1$

+		}

+		return objectName;

+	}

+

+	/**

+	 * Returns the label provider wrapped around {@link EMFAdapterFactoryProvider#getAdapterFactory()}.

+	 * 

+	 * @return The label provider wrapped around {@link EMFAdapterFactoryProvider#getAdapterFactory()}.

+	 */

+	private static AdapterFactoryLabelProvider getLabelProvider() {

+		if (labelProvider == null) {

+			labelProvider = new AdapterFactoryLabelProvider(getAdapterFactory());

+		}

+		return labelProvider;

+	}

+

+	/**

+	 * Returns a factory built with all the {@link AdapterFactory} instances available in the global registry.

+	 * 

+	 * @return A factory built with all the {@link AdapterFactory} instances available in the global registry.

+	 */

+	public static AdapterFactory getAdapterFactory() {

+		return FACTORY;

+	}

+

+	/**

+	 * Returns an adapter factory containing all the global EMF registry's factories.

+	 * 

+	 * @return An adapter factory made of all the adapter factories declared in the registry.

+	 */

+	private static ComposedAdapterFactory createAdapterFactory() {

+		final List<AdapterFactory> factories = new ArrayList<AdapterFactory>();

+		factories.add(new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE));

+		factories.add(new ReflectiveItemProviderAdapterFactory());

+		return new ComposedAdapterFactory(factories);

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchronizerMessageProvider.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchronizerMessageProvider.java
new file mode 100644
index 0000000..998cf3c
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchronizerMessageProvider.java
@@ -0,0 +1,263 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.factory;

+

+import org.eclipse.emf.compare.diff.metamodel.AttributeChange;

+import org.eclipse.emf.compare.diff.metamodel.DiffElement;

+import org.eclipse.emf.compare.diff.metamodel.DiffPackage;

+import org.eclipse.emf.compare.diff.metamodel.ModelElementChangeLeftTarget;

+import org.eclipse.emf.compare.diff.metamodel.ModelElementChangeRightTarget;

+import org.eclipse.emf.compare.diff.metamodel.ReferenceChange;

+import org.eclipse.emf.compare.diff.metamodel.UpdateAttribute;

+import org.eclipse.emf.compare.diff.metamodel.UpdateReference;

+import org.eclipse.emf.compare.diff.metamodel.impl.UpdateAttributeImpl;

+import org.eclipse.emf.compare.diff.metamodel.impl.UpdateReferenceImpl;

+import org.eclipse.emf.ecore.ENamedElement;

+import org.eclipse.emf.ecore.EStructuralFeature;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+

+/**

+ * Provide messages created from a given DiffElement.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class SynchronizerMessageProvider {

+

+	/**

+	 * Represents a whitespace in a status message.

+	 */

+	private static final String SYNC_MESSAGES_WHITESPACE = " ";

+

+	private static final String SYNC_MESSAGES_INTERNAL_MODEL = "<b>Current Document</b>";

+

+	private static final String SYNC_MESSAGES_EXTERNAL_MODEL = "<b>Working Copy</b>";

+

+	/**

+	 * Represents the separation space between to status.

+	 */

+	private static final String SYNC_STATUS_SEPARATOR = "<br/><hr/><br/>";

+

+	/**

+	 * SynchronizerMessageProvider constructor.

+	 */

+	private SynchronizerMessageProvider() {

+

+	}

+

+	/**

+	 * Create a message from the given {@link DiffElement}.

+	 * 

+	 * @param diffElement

+	 *            the {@link DiffElement} used to create the returned message

+	 * @return a message created from the given {@link DiffElement} element

+	 */

+	public static String createMessageFromDiffElement(DiffElement diffElement) {

+		String returnedMessage = null;

+		try {

+			switch (diffElement.eClass().getClassifierID()) {

+				case DiffPackage.ATTRIBUTE_CHANGE:

+					returnedMessage = createMessageFromAttributeChange((AttributeChange)diffElement);

+					break;

+

+				case DiffPackage.REFERENCE_CHANGE:

+					returnedMessage = createMessageFromReferenceChange((ReferenceChange)diffElement);

+					break;

+

+				case DiffPackage.UPDATE_ATTRIBUTE:

+					returnedMessage = createMessageFromUpdateAttribute((UpdateAttribute)diffElement);

+					break;

+				case DiffPackage.UPDATE_REFERENCE:

+					returnedMessage = createMessageFromUpdateReference((UpdateReference)diffElement);

+					break;

+

+				case DiffPackage.MODEL_ELEMENT_CHANGE_LEFT_TARGET:

+					returnedMessage = createMessageFromModelElementChangeLeftTarget((ModelElementChangeLeftTarget)diffElement);

+					break;

+				case DiffPackage.MODEL_ELEMENT_CHANGE_RIGHT_TARGET:

+					returnedMessage = createMessageFromModelElementChangeRightTarget((ModelElementChangeRightTarget)diffElement);

+					break;

+				case DiffPackage.REFERENCE_CHANGE_LEFT_TARGET:

+					break;

+				case DiffPackage.REFERENCE_CHANGE_RIGHT_TARGET:

+					break;

+				case DiffPackage.RESOURCE_DIFF:

+					break;

+				default:

+					break;

+

+			}

+		} catch (IllegalArgumentException e) {

+			returnedMessage = null;

+		}

+		if (returnedMessage == null) {

+			returnedMessage = SynchonizerEObjectNameGetter.computeObjectName(diffElement);

+		}

+		return returnedMessage;

+	}

+

+	/**

+	 * Create a message from the given AttributeChange element.

+	 * 

+	 * @param difference

+	 *            the DiffElement used to create the returned message

+	 * @return a message created from the given AttributeChange element

+	 */

+	public static String createMessageFromAttributeChange(AttributeChange difference) {

+		return difference.toString();

+	}

+

+	/**

+	 * Create a message from the given ReferenceChange element.

+	 * 

+	 * @param difference

+	 *            the DiffElement used to create the returned message

+	 * @return a message created from the given ReferenceChange element

+	 */

+	public static String createMessageFromReferenceChange(ReferenceChange difference) {

+		return difference.toString();

+	}

+

+	/**

+	 * Create a message from the given UpdateAttribute element.

+	 * 

+	 * @param difference

+	 *            the DiffElement used to create the returned message

+	 * @return a message created from the given UpdateAttribute element

+	 */

+	public static String createMessageFromUpdateAttribute(UpdateAttribute difference) {

+		// We get the attribute

+		EStructuralFeature attribute = ((UpdateAttributeImpl)difference).getAttribute();

+		// <Attribute's class name> <attributename>

+		String returnedMessage = attribute.eClass().getName() + SYNC_MESSAGES_WHITESPACE

+				+ attribute.getName();

+		// If the container of this attribute has a name, 'in' <name of the instance containing this

+		// attribute>

+		if (difference.getLeftElement() instanceof ENamedElement) {

+			String name = ((ENamedElement)difference.getLeftElement()).getName();

+			if (name != null) {

+				returnedMessage += " in " + name;

+			}

+		}

+		// Standard comparison message

+		returnedMessage += createCompareValuesMessage(difference.getLeftElement().eGet(attribute), difference

+				.getRightElement().eGet(attribute));

+		return returnedMessage;

+	}

+

+	/**

+	 * Create a message from the given UpdateAttribute element.

+	 * 

+	 * @param difference

+	 *            the DiffElement used to create the returned message

+	 * @return a message created from the given UpdateAttribute element

+	 */

+	public static String createMessageFromUpdateReference(UpdateReference difference) {

+		EStructuralFeature reference = ((UpdateReferenceImpl)difference).getReference();

+		String returnedMessage = reference.eClass().getName() + SYNC_MESSAGES_WHITESPACE

+				+ reference.getName();

+

+		if (difference.getLeftElement() instanceof ENamedElement) {

+			String name = ((ENamedElement)difference.getLeftElement()).getName();

+			if (name != null) {

+				returnedMessage += " in " + name;

+			}

+		}

+		returnedMessage += createCompareValuesMessage(difference.getLeftElement().eGet(reference), difference

+				.getRightElement().eGet(reference));

+		return returnedMessage;

+	}

+

+	/**

+	 * Create a message from the given ModelElementChangeLeftTarget element.

+	 * 

+	 * @param difference

+	 *            the DiffElement used to create the returned message

+	 * @return a message created from the given ModelElementChangeLeftTarget element

+	 */

+	public static String createMessageFromModelElementChangeLeftTarget(ModelElementChangeLeftTarget difference) {

+		String returnedMessage = "The " + difference.getLeftElement().eClass().getName();

+		if (difference.getLeftElement() instanceof ENamedElement) {

+			String name = ((ENamedElement)difference.getLeftElement()).getName();

+			if (name != null) {

+				returnedMessage += SYNC_MESSAGES_WHITESPACE + name;

+			}

+		}

+		returnedMessage += " is defined in the " + SYNC_MESSAGES_INTERNAL_MODEL

+				+ " model<br/>but not in the " + SYNC_MESSAGES_EXTERNAL_MODEL + " model.";

+		return returnedMessage;

+	}

+

+	/**

+	 * Create a message from the given ModelElementChangeRightTarget element.

+	 * 

+	 * @param difference

+	 *            the DiffElement used to create the returned message

+	 * @return a message created from the given ModelElementChangeRightTarget element

+	 */

+	public static String createMessageFromModelElementChangeRightTarget(

+			ModelElementChangeRightTarget difference) {

+		String returnedMessage = "The " + difference.getRightElement().eClass().getName();

+		if (difference.getRightElement() instanceof ENamedElement) {

+			String name = ((ENamedElement)difference.getRightElement()).getName();

+			if (name != null) {

+				returnedMessage += SYNC_MESSAGES_WHITESPACE + name;

+			}

+		}

+		returnedMessage += " is defined in the " + SYNC_MESSAGES_EXTERNAL_MODEL

+				+ " model<br/>but not in the " + SYNC_MESSAGES_INTERNAL_MODEL + " model.";

+		return returnedMessage;

+	}

+

+	/**

+	 * Create a standard comparison message between the given value from the repository and the given local

+	 * value.

+	 * 

+	 * @param repositoryValue

+	 *            the repositoryValue

+	 * @param localValue

+	 *            the localValue

+	 * @return a standard comparison message between the two given values

+	 */

+	private static String createCompareValuesMessage(Object repositoryValue, Object localValue) {

+		return " has changed.<br/>" + SYNC_MESSAGES_INTERNAL_MODEL + " : " + repositoryValue + "<br/>"

+				+ SYNC_MESSAGES_EXTERNAL_MODEL + " : " + localValue;

+	}

+

+	/**

+	 * Returns a String representing the separation space between to status.

+	 * 

+	 * @return a String representing the separation space between to status

+	 */

+	public static String getStatusSeparator() {

+		return SYNC_STATUS_SEPARATOR;

+	}

+

+	/**

+	 * Creates an error message indicating that the given resourceDeclaration hasn't been found externally.

+	 * 

+	 * @param resourceDeclaration

+	 *            the resourceDeclaration that hasn't been found externally

+	 * @return an error message indicating that the given resourceDeclaration hasn't been found externally

+	 */

+	public static String createMessageForNullExternalResource(ResourceDeclaration resourceDeclaration) {

+		String returnedMessage = "Resource ";

+		if (resourceDeclaration.getName() != null) {

+			returnedMessage += resourceDeclaration.getName() + SYNC_MESSAGES_WHITESPACE;

+		}

+		returnedMessage += " has been generated on the " + SYNC_MESSAGES_INTERNAL_MODEL + " but no "

+				+ SYNC_MESSAGES_EXTERNAL_MODEL + " Resource found";

+		if (resourceDeclaration.getUri() != null) {

+			returnedMessage += " at URI : " + resourceDeclaration.getUri().toString();

+		}

+		returnedMessage += ".";

+		return returnedMessage;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchronizerStatusFactory.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchronizerStatusFactory.java
new file mode 100644
index 0000000..1fef880
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/factory/SynchronizerStatusFactory.java
@@ -0,0 +1,187 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.factory;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.compare.diff.metamodel.AttributeChange;

+import org.eclipse.emf.compare.diff.metamodel.DiffElement;

+import org.eclipse.emf.compare.diff.metamodel.DiffPackage;

+import org.eclipse.emf.compare.diff.metamodel.ModelElementChangeLeftTarget;

+import org.eclipse.emf.compare.diff.metamodel.ModelElementChangeRightTarget;

+import org.eclipse.emf.compare.diff.metamodel.ReferenceChange;

+import org.eclipse.emf.compare.diff.metamodel.ReferenceChangeLeftTarget;

+import org.eclipse.emf.compare.diff.metamodel.ReferenceChangeRightTarget;

+import org.eclipse.emf.compare.diff.metamodel.UpdateAttribute;

+import org.eclipse.emf.compare.diff.metamodel.UpdateReference;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusSeverity;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndexEntry;

+import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;

+

+/**

+ * This factory is in charge of creating {@link CompilationStatus} from different elements (

+ * {@link DiffElement} of a DiffModel, error on a ResourceDeclaration...).

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class SynchronizerStatusFactory {

+

+	/**

+	 * SynchronizerStatusFactory constructor.

+	 */

+	private SynchronizerStatusFactory() {

+

+	}

+

+	/**

+	 * Create a list of compilationStatus from the given {@link DiffElement}.

+	 * 

+	 * @param indexEntry

+	 *            the indexEntry currently visited

+	 * @param difference

+	 *            the {@link DiffElement} describing the differences between an element of the internal

+	 *            generated model and the element of an external generated model

+	 * @param indexEntry

+	 * @return a list of compilationStatus created from the given {@link DiffElement}

+	 */

+	public static List<CompilationStatus> createStatusFromDiffElement(TraceabilityIndexEntry indexEntry,

+			DiffElement difference) {

+

+		List<CompilationStatus> statusList = new ArrayList<CompilationStatus>();

+

+		// If we have a unitary diffElement

+		if (difference.getSubDiffElements().isEmpty()) {

+			CompilationStatus status = CompilerFactory.eINSTANCE.createCompilationStatus();

+

+			status.setSeverity(CompilationStatusSeverity.WARNING);

+			status.setType(CompilationMessageType.SYNCHRONIZER_WARNING);

+			IntentGenericElement targetInstruction = getTargetInstructionFromDiffElement(indexEntry, difference);

+			status.setMessage(SynchronizerMessageProvider.createMessageFromDiffElement(difference));

+			if (targetInstruction != null) {

+				status.setTarget(targetInstruction);

+				statusList.add(status);

+			}

+		} else {

+			// If the given diffElement contains sub-diffElements

+			for (DiffElement subDifference : difference.getSubDiffElements()) {

+				statusList.addAll(createStatusFromDiffElement(indexEntry, subDifference));

+			}

+		}

+		return statusList;

+	}

+

+	/**

+	 * Returns the instruction that defined the target of the given diffElement ; if not element found,

+	 * returns the resourceDeclaration that defined this element.

+	 * 

+	 * @param indexEntry

+	 *            the indexEntry currently visited

+	 * @param difference

+	 *            the {@link DiffElement} describing the differences between an element of the internal

+	 *            generated model and the element of an external generated model

+	 * @return the instruction that defined the target of the given diffElement ; if not element found,

+	 *         returns the resourceDeclaration that defined this element

+	 */

+	private static IntentGenericElement getTargetInstructionFromDiffElement(TraceabilityIndexEntry indexEntry,

+			DiffElement difference) {

+		// We get the compiled Element target of this diffElement

+		EObject compiledElement = getCompiledElementTargetFromDiffElement(difference);

+		IntentGenericElement targetInstruction = null;

+

+		if (compiledElement != null) {

+			// We use the traceabilityElementIndex to determine which instruction has defined this element

+			EObject compiledContainer = compiledElement;

+

+			while ((targetInstruction == null) && (compiledContainer != null)

+					&& (!(compiledContainer instanceof Resource))) {

+				targetInstruction = getInstructionFromCompiledElement(indexEntry, compiledContainer);

+				compiledContainer = compiledContainer.eContainer();

+			}

+		}

+		// If no instruction has been found, we associated the status with the currently compiled resource

+		if (targetInstruction == null) {

+			System.err.println("CANNOT FIND ANNY INSTRUCTION FOR " + compiledElement);

+			targetInstruction = indexEntry.getResourceDeclaration();

+		}

+

+		return targetInstruction;

+	}

+

+	/**

+	 * Returns the target of the given DiffElement.

+	 * 

+	 * @param difference

+	 *            the DiffElement to inspect

+	 * @return the target of the given DiffElement

+	 */

+	private static EObject getCompiledElementTargetFromDiffElement(DiffElement difference) {

+		EObject compiledElementTarget = null;

+

+		switch (difference.eClass().getClassifierID()) {

+			case DiffPackage.ATTRIBUTE_CHANGE:

+				compiledElementTarget = ((AttributeChange)difference).getLeftElement();

+				break;

+

+			case DiffPackage.REFERENCE_CHANGE:

+				compiledElementTarget = ((ReferenceChange)difference).getLeftElement();

+				break;

+

+			case DiffPackage.UPDATE_ATTRIBUTE:

+				compiledElementTarget = ((UpdateAttribute)difference).getLeftElement();

+				break;

+			case DiffPackage.UPDATE_REFERENCE:

+				compiledElementTarget = ((UpdateReference)difference).getLeftElement();

+				break;

+

+			case DiffPackage.MODEL_ELEMENT_CHANGE_LEFT_TARGET:

+				compiledElementTarget = ((ModelElementChangeLeftTarget)difference).getLeftElement();

+				break;

+			case DiffPackage.MODEL_ELEMENT_CHANGE_RIGHT_TARGET:

+				compiledElementTarget = ((ModelElementChangeRightTarget)difference).getLeftParent();

+				break;

+			case DiffPackage.REFERENCE_CHANGE_LEFT_TARGET:

+				compiledElementTarget = ((ReferenceChangeLeftTarget)difference).getLeftElement();

+				break;

+			case DiffPackage.REFERENCE_CHANGE_RIGHT_TARGET:

+				compiledElementTarget = ((ReferenceChangeRightTarget)difference).getRightElement();

+				break;

+			case DiffPackage.RESOURCE_DIFF:

+				// TODO

+				break;

+			default:

+				break;

+

+		}

+

+		return compiledElementTarget;

+	}

+

+	/**

+	 * Returns the instruction that defined the given compiledElement.

+	 * 

+	 * @param indexEntry

+	 *            the indexEntry currently visited

+	 * @param compiledElement

+	 *            the compiledElement from which we want to determine the instruction

+	 * @return the instruction that defined the given compiledElements (can be null)

+	 */

+	private static IntentGenericElement getInstructionFromCompiledElement(TraceabilityIndexEntry indexEntry,

+			EObject compiledElement) {

+		return indexEntry.getContainedElementToInstructions().get(compiledElement);

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/launcher/SynchronizerCreator.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/launcher/SynchronizerCreator.java
new file mode 100644
index 0000000..2039611
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/launcher/SynchronizerCreator.java
@@ -0,0 +1,99 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.launcher;

+

+import java.util.HashSet;

+import java.util.Set;

+

+import org.eclipse.emf.common.util.Monitor;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.SynchronizerRepositoryClient;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener;

+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.ReadWriteRepositoryObjectHandlerImpl;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.elementList.ElementListAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.elementList.ElementListNotificator;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.Notificator;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.collab.utils.RepositoryCreatorHolder;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndex;

+

+/**

+ * Creates a Synchronizer client.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class SynchronizerCreator {

+

+	/**

+	 * SynchronizerCreator constructor.

+	 */

+	private SynchronizerCreator() {

+

+	}

+

+	/**

+	 * Creates a Synchronizer client.

+	 * 

+	 * @param repository

+	 *            is the repository containing the generated models to synchronize

+	 * @param generatedElementListener

+	 *            a listener on the generated elements

+	 * @return the created Synchronizer client

+	 * @throws RepositoryConnectionException

+	 *             if a connection to the given repository cannot be established

+	 * @param progressMonitor

+	 *            the progress Monitor indicating if this synchronization operation has been canceled

+	 */

+	public static SynchronizerRepositoryClient createSynchronizer(Repository repository,

+			Monitor progressMonitor, GeneratedElementListener generatedElementListener)

+			throws RepositoryConnectionException {

+

+		// Step 1 : we initialize the listened elements

+		final RepositoryAdapter repositoryAdapter = RepositoryCreatorHolder.getCreator()

+				.createRepositoryAdapterForRepository(repository);

+		Set<EObject> listenedElements = new HashSet<EObject>();

+

+		repositoryAdapter.openReadOnlyContext();

+		Resource traceabilityResource = repositoryAdapter

+				.getResource(IntentLocations.TRACEABILITY_INFOS_INDEX_PATH);

+		if (traceabilityResource.getContents().isEmpty()) {

+			traceabilityResource.getContents().add(CompilerFactory.eINSTANCE.createTraceabilityIndex());

+		}

+		EObject traceAbilityIndex = traceabilityResource.getContents().get(0);

+

+		listenedElements.add(traceAbilityIndex);

+		// Step 2 : create the adapter and the handler for these types

+

+		RepositoryObjectHandler handler = new ReadWriteRepositoryObjectHandlerImpl(repositoryAdapter);

+

+		ElementListAdapter adapter = new ElementListAdapter();

+

+		Notificator listenedElementsNotificator = new ElementListNotificator(listenedElements, adapter);

+		handler.setNotificator(listenedElementsNotificator);

+

+		// Step 3 : create the synchronizer

+		SynchronizerRepositoryClient synchronizerClient = new SynchronizerRepositoryClient(

+				(TraceabilityIndex)traceAbilityIndex, progressMonitor);

+		synchronizerClient.addRepositoryObjectHandler(handler);

+		synchronizerClient.setGeneratedElementListener(generatedElementListener);

+

+		// We don't need to launch the synchronizer until the change of the compiler's generatedElement index.

+		// TODO REMOVE THIS CALL

+		repositoryAdapter.closeContext();

+		return synchronizerClient;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/listeners/AbstractGeneratedElementListener.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/listeners/AbstractGeneratedElementListener.java
new file mode 100644
index 0000000..aa3eb58
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/listeners/AbstractGeneratedElementListener.java
@@ -0,0 +1,88 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.listeners;

+

+import java.util.ArrayList;

+

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.SynchronizerRepositoryClient;

+

+/**

+ * Provides partial implementation of the {@link GeneratedElementListener}.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class AbstractGeneratedElementListener implements GeneratedElementListener {

+

+	/**

+	 * The synchronizer to notify if changes are detected.

+	 */

+	protected SynchronizerRepositoryClient synchronizer;

+

+	/**

+	 * The URI of listened elements.

+	 */

+	protected ArrayList<URI> listenedElementsURIs;

+

+	/**

+	 * AbstractGeneratedElementListener constructor.

+	 */

+	public AbstractGeneratedElementListener() {

+		this.listenedElementsURIs = new ArrayList<URI>();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener#setSynchronizer(org.eclipse.mylyn.docs.intent.client.synchronizer.SynchronizerRepositoryClient)

+	 */

+	public void setSynchronizer(SynchronizerRepositoryClient synchronizer) {

+		this.synchronizer = synchronizer;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener#notifySynchronizer(org.eclipse.emf.common.util.URI)

+	 */

+	public void notifySynchronizer(URI uriOfChangedElement) {

+		this.synchronizer.handleChangeNotification(null);

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener#addElementToListen(org.eclipse.emf.common.util.URI)

+	 */

+	public void addElementToListen(URI uri) {

+		this.listenedElementsURIs.add(uri);

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener#removeElementToListen(org.eclipse.emf.common.util.URI)

+	 */

+	public void removeElementToListen(URI uri) {

+		this.listenedElementsURIs.remove(uri);

+

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener#clearElementToListen()

+	 */

+	public void clearElementToListen() {

+		this.listenedElementsURIs.clear();

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/listeners/GeneratedElementListener.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/listeners/GeneratedElementListener.java
new file mode 100644
index 0000000..c107634
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/listeners/GeneratedElementListener.java
@@ -0,0 +1,61 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.listeners;

+

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.SynchronizerRepositoryClient;

+

+/**

+ * Listens all the generated element (external to the repository) and warn the synchronizer when one of them

+ * change.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public interface GeneratedElementListener {

+

+	/**

+	 * Sets the synchronizer that must be notified and provides the generatedElements to listen.

+	 * 

+	 * @param synchronizer

+	 *            the synchronizer that must be notified and provides the generatedElements to listen

+	 */

+	void setSynchronizer(SynchronizerRepositoryClient synchronizer);

+

+	/**

+	 * Notifies the synchronizer that the element at the given URI changed.

+	 * 

+	 * @param uriOfChangedElement

+	 *            the URI of the changed element

+	 */

+	void notifySynchronizer(URI uriOfChangedElement);

+

+	/**

+	 * Adds an element to listen.

+	 * 

+	 * @param uri

+	 *            the uri of the element to listen

+	 */

+	void addElementToListen(URI uri);

+

+	/**

+	 * Removes the given element of the listened elements.

+	 * 

+	 * @param uri

+	 *            the uri of the element to remove

+	 */

+	void removeElementToListen(URI uri);

+

+	/**

+	 * Clears the element to listen list.

+	 */

+	void clearElementToListen();

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/CopyInternalResourceStrategy.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/CopyInternalResourceStrategy.java
new file mode 100644
index 0000000..2157a45
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/CopyInternalResourceStrategy.java
@@ -0,0 +1,99 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.strategy;

+

+import java.io.IOException;

+import java.util.HashMap;

+import java.util.Map;

+

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.emf.ecore.xmi.XMIResource;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+

+/**

+ * In case of a null external resource, creates a new resource with the internal resource content; see

+ * {@link SynchronizerStrategy} fore more details.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class CopyInternalResourceStrategy implements SynchronizerStrategy {

+	/**

+	 * {@inheritDoc}

+	 * <p>

+	 * The strategy applied here is to create and save a new external Resource and copy the internal Resource

+	 * content.

+	 * </p>

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#handleNullExternalResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource handleNullExternalResource(ResourceDeclaration resourceDeclaration,

+			Resource internalResource, String externalResourceURI) {

+		ResourceSet resourceSet = new ResourceSetImpl();

+		String uri = externalResourceURI.replace("\"", "");

+		URI externalURI = URI.createURI(uri);

+		Resource externalResource = resourceSet.createResource(externalURI);

+		for (EObject root : internalResource.getContents()) {

+			externalResource.getContents().add(EcoreUtil.copy(root));

+		}

+		try {

+			Map<String, Boolean> options = new HashMap<String, Boolean>();

+			options.put(XMIResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);

+			options.put(XMIResource.OPTION_USE_XMI_TYPE, Boolean.TRUE);

+			externalResource.save(options);

+		} catch (IOException e) {

+			// We simply stop the synchronization on these resources

+			return null;

+		}

+		return externalResource;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * <p>

+	 * The strategy applied here is to stop this synchronization operation.

+	 * </p>

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#handleNullInternalResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource handleNullInternalResource(String internalResourceURI, Resource externalResource) {

+		// We just stop the synchronization on these resources

+		return null;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#getLeftResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource getLeftResource(Resource internalResource, Resource externalResource) {

+		// Here we consider that the latest version is from the repository in any case

+		return internalResource;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#getRightResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource getRightResource(Resource internalResource, Resource externalResource) {

+		// Here we consider that the latest version is from the repository in any case

+		return externalResource;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/DefaultSynchronizerStrategy.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/DefaultSynchronizerStrategy.java
new file mode 100644
index 0000000..59b8039
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/DefaultSynchronizerStrategy.java
@@ -0,0 +1,87 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.strategy;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.factory.SynchronizerMessageProvider;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatusSeverity;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+

+/**

+ * Default Synchronizer Strategy, see {@link SynchronizerStrategy} fore more details.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class DefaultSynchronizerStrategy implements SynchronizerStrategy {

+

+	/**

+	 * {@inheritDoc}

+	 * <p>

+	 * The strategy applied here is to create and save a new external Resource and copy the internal Resource

+	 * content.

+	 * </p>

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#handleNullExternalResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource handleNullExternalResource(ResourceDeclaration resourceDeclaration,

+			Resource internalResource, String externalResourceURI) {

+

+		CompilationStatus status = CompilerFactory.eINSTANCE.createCompilationStatus();

+		status.setSeverity(CompilationStatusSeverity.WARNING);

+		status.setTarget(resourceDeclaration);

+		status.setType(CompilationMessageType.SYNCHRONIZER_WARNING);

+		status.setMessage(SynchronizerMessageProvider

+				.createMessageForNullExternalResource(resourceDeclaration));

+		resourceDeclaration.getCompilationStatus().add(status);

+		return null;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * <p>

+	 * The strategy applied here is to stop this synchronization operation.

+	 * </p>

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#handleNullInternalResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource handleNullInternalResource(String internalResourceURI, Resource externalResource) {

+		// We just stop the synchronization on these resources

+		return null;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#getLeftResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource getLeftResource(Resource internalResource, Resource externalResource) {

+		// Here we consider that the latest version is from the repository in any case

+		return internalResource;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy#getRightResource(org.eclipse.emf.ecore.resource.Resource,

+	 *      org.eclipse.emf.ecore.resource.Resource)

+	 */

+	public Resource getRightResource(Resource internalResource, Resource externalResource) {

+		// Here we consider that the latest version is from the repository in any case

+		return externalResource;

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/SynchronizerStrategy.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/SynchronizerStrategy.java
new file mode 100644
index 0000000..3418b45
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/strategy/SynchronizerStrategy.java
@@ -0,0 +1,73 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.strategy;

+

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ResourceDeclaration;

+

+/**

+ * Define a set of behaviors that will be used during a Synchronization operation.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public interface SynchronizerStrategy {

+

+	/**

+	 * Handles the case of a null external resource (can decide to copy the internal Resource or put a new

+	 * Status on the resource for example).

+	 * 

+	 * @param resourceDeclaration

+	 *            the resourceDeclaration associated to the given internal Resource

+	 * @param internalResource

+	 *            the internal (repository) compiled resource

+	 * @param externalResourceURI

+	 *            the URI of the external (local or repository or http...) compiled resource

+	 * @return the modified external resource (the synchronizer will stop if it's null)

+	 */

+	Resource handleNullExternalResource(ResourceDeclaration resourceDeclaration, Resource internalResource,

+			String externalResourceURI);

+

+	/**

+	 * Handles the case of a null internal resource (can decide to stop for example).

+	 * 

+	 * @param internalResourceURI

+	 *            the URI of the internal (repository) compiled resource

+	 * @param externalResource

+	 *            the external (local or repository or http...) compiled resource

+	 * @return the modified internal resource (the synchronizer will stop if it's null)

+	 */

+	Resource handleNullInternalResource(String internalResourceURI, Resource externalResource);

+

+	/**

+	 * Returns the resource that should be considered has the left Resource during comparison (see EMFCompare

+	 * documentation for more informations).

+	 * 

+	 * @param internalResource

+	 *            the internal (repository) compiled resource

+	 * @param externalResource

+	 *            the external (local or repository or http...) compiled resource

+	 * @return the resource that should be considered has the left Resource during comparison

+	 */

+	Resource getLeftResource(Resource internalResource, Resource externalResource);

+

+	/**

+	 * Returns the resource that should be considered has the right Resource during comparison (see EMFCompare

+	 * documentation for more informations).

+	 * 

+	 * @param internalResource

+	 *            the internal (repository) compiled resource

+	 * @param externalResource

+	 *            the external (local or repository or http...) compiled resource

+	 * @return the resource that should be considered has the right Resource during comparison

+	 */

+	Resource getRightResource(Resource internalResource, Resource externalResource);

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/synchronizer/IntentSynchronizer.java b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/synchronizer/IntentSynchronizer.java
new file mode 100644
index 0000000..8c6e7b4
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.synchronizer/src/org/eclipse/mylyn/docs/intent/client/synchronizer/synchronizer/IntentSynchronizer.java
@@ -0,0 +1,361 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.synchronizer.synchronizer;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashMap;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.emf.common.util.Monitor;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.common.util.WrappedException;

+import org.eclipse.emf.compare.diff.metamodel.DiffElement;

+import org.eclipse.emf.compare.diff.metamodel.DiffModel;

+import org.eclipse.emf.compare.diff.service.DiffService;

+import org.eclipse.emf.compare.match.metamodel.MatchModel;

+import org.eclipse.emf.compare.match.service.MatchService;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.factory.SynchronizerMessageProvider;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.factory.SynchronizerStatusFactory;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.GeneratedElementListener;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.CopyInternalResourceStrategy;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.strategy.SynchronizerStrategy;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationMessageType;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilationStatus;

+import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndex;

+import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndexEntry;

+import org.eclipse.mylyn.docs.intent.core.document.IntentGenericElement;

+

+/**

+ * In charge of comparing the compiled models of the repository with the compiled models generated at the

+ * location indicated by a Intent ResourceDeclaration.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class IntentSynchronizer {

+

+	/**

+	 * The Synchronizer strategy to use, defining several behaviors in case of conflict.

+	 */

+	private SynchronizerStrategy synchronizerStrategy;

+

+	private GeneratedElementListener generatedElementListener;

+

+	/**

+	 * IntentSynchronizer constructor.

+	 */

+	public IntentSynchronizer() {

+		this.synchronizerStrategy = new CopyInternalResourceStrategy();

+	}

+

+	/**

+	 * Sets the Synchronizer strategy to use.

+	 * 

+	 * @param strategy

+	 *            the Synchronizer strategy to use

+	 */

+	public void setSynchronizerStrategy(SynchronizerStrategy strategy) {

+		this.synchronizerStrategy = strategy;

+	}

+

+	/**

+	 * Sets the generatedElement listener, which will notify the Synchronizer if any generatedElement has

+	 * changed.

+	 * 

+	 * @param generatedElementListener

+	 *            the GeneratedElementListener

+	 */

+	public void setGeneratedElementListener(GeneratedElementListener generatedElementListener) {

+		this.generatedElementListener = generatedElementListener;

+	}

+

+	/**

+	 * Using the given traceability index, compares the compiled models of the repository with the compiled

+	 * models generated at the location indicated by this index ; if the two models aren't similar, adds a

+	 * status representing the differences to the returned list of status.

+	 * 

+	 * @param adapter

+	 *            the repositoryAdapter to use for getting the repository content

+	 * @param tracabilityIndex

+	 *            the Traceability index to use {@link TraceabilityResourceIndex}

+	 * @param progressMonitor

+	 *            the progress Monitor indicating if this synchronization operation has been canceled

+	 * @return a list containing status relatives to synchronization

+	 * @throws InterruptedException

+	 *             if this operation was interrupted

+	 */

+	public Collection<? extends CompilationStatus> synchronize(RepositoryAdapter adapter,

+			TraceabilityIndex tracabilityIndex, Monitor progressMonitor) throws InterruptedException {

+		List<CompilationStatus> statusList = new ArrayList<CompilationStatus>();

+		if (generatedElementListener != null) {

+			generatedElementListener.clearElementToListen();

+		}

+		Iterator<TraceabilityIndexEntry> indexEntryIterator = tracabilityIndex.getEntries().iterator();

+		while (indexEntryIterator.hasNext()) {

+			this.stopIfCanceled(progressMonitor);

+			TraceabilityIndexEntry indexEntry = indexEntryIterator.next();

+			// First of all, we clear the old synchronization statuses

+			clearSyncStatusesFromIndexEntry(indexEntry);

+			// We then generate the synchronization status for this entry

+			statusList.addAll(synchronize(adapter, indexEntry, progressMonitor));

+		}

+		return statusList;

+	}

+

+	/**

+	 * Clears the synchronization statues associated to the given indexEntry (i.e in the ResourceDeclaration

+	 * and the instructions that describes the generated content).

+	 * 

+	 * @param indexEntry

+	 *            the index Entry containing the instructions to clear

+	 */

+	private void clearSyncStatusesFromIndexEntry(TraceabilityIndexEntry indexEntry) {

+

+		// We first remove the synchronization statutes associated to the resource Declaration

+		Iterator<CompilationStatus> statusIterator = indexEntry.getResourceDeclaration()

+				.getCompilationStatus().iterator();

+

+		while (statusIterator.hasNext()) {

+			CompilationStatus status = statusIterator.next();

+			if (status.getType().equals(CompilationMessageType.SYNCHRONIZER_WARNING)) {

+				statusIterator.remove();

+			}

+		}

+		// Then, for each mapped element

+		for (EObject containedElement : indexEntry.getContainedElementToInstructions().keySet()) {

+

+			// We must remove the synchronization statuses from the instruction that generated this element

+			IntentGenericElement instruction = indexEntry.getContainedElementToInstructions().get(

+					containedElement);

+			Iterator<CompilationStatus> iterator = instruction.getCompilationStatus().iterator();

+			while (iterator.hasNext()) {

+				CompilationStatus status = iterator.next();

+				if (status.getType().equals(CompilationMessageType.SYNCHRONIZER_WARNING)) {

+					iterator.remove();

+				}

+			}

+		}

+

+	}

+

+	/**

+	 * Using the given TraceabilitIndexEntry, compares the model located at the indicated path with the model

+	 * located at the path indicated by the resource declaration.

+	 * 

+	 * @param adapter

+	 *            the repositoryAdapter to use for getting the repository content

+	 * @param indexEntry

+	 *            the indexEntry to use for obtaining synchronization informations

+	 * @param progressMonitor

+	 *            the progress Monitor indicating if this synchronization operation has been canceled

+	 * @return a list of status relatives to synchronization of the model described in the given indexEntry

+	 * @throws InterruptedException

+	 *             if this operation was interrupted

+	 */

+	private Collection<? extends CompilationStatus> synchronize(RepositoryAdapter adapter,

+			TraceabilityIndexEntry indexEntry, Monitor progressMonitor) throws InterruptedException {

+		List<CompilationStatus> statusList = new ArrayList<CompilationStatus>();

+		boolean continueSynchronization = true;

+

+		Resource internalResource = null;

+		// Step 1 : getting the repository resource

+		stopIfCanceled(progressMonitor);

+		internalResource = getInternalResource(adapter, indexEntry);

+

+		Resource externalResource = null;

+		stopIfCanceled(progressMonitor);

+		// Step 2 : getting the generated resource

+		externalResource = getExternalResource(indexEntry);

+

+		stopIfCanceled(progressMonitor);

+		// Step 3 : if one of the resource is null,

+		// we use the strategy to handle these cases

+		if (internalResource == null) {

+			internalResource = synchronizerStrategy.handleNullInternalResource(

+					indexEntry.getGeneratedResourcePath(), externalResource);

+			// TODO : we can create here a status if the internal Resource has not been created

+			continueSynchronization = internalResource != null;

+		}

+		if (externalResource == null) {

+			externalResource = synchronizerStrategy.handleNullExternalResource(indexEntry

+					.getResourceDeclaration(), internalResource, (String)indexEntry.getResourceDeclaration()

+					.getUri());

+			// TODO : we can create here a status if the external Resource has not been created

+			continueSynchronization = externalResource != null;

+		}

+

+		stopIfCanceled(progressMonitor);

+		// If no resource was null or if the strategy authorizes the operation to continue

+		if (continueSynchronization) {

+

+			// Step 4 : comparing those two resources

+			Resource leftResource = synchronizerStrategy.getLeftResource(internalResource, externalResource);

+			Resource rightResource = synchronizerStrategy

+					.getRightResource(internalResource, externalResource);

+

+			List<DiffElement> differences = null;

+			stopIfCanceled(progressMonitor);

+			differences = compareResource(leftResource, rightResource);

+

+			stopIfCanceled(progressMonitor);

+			// Step 5 : creating status from the DiffElement

+			statusList = createSynchronizerSatusListFromDiffModel(indexEntry, differences, progressMonitor);

+

+			// Step 6 : unloading the external resource

+			externalResource.unload();

+

+			// Step 7 : we ask the generated element listener to listen to the external Resource

+			if (this.generatedElementListener != null) {

+				this.generatedElementListener.addElementToListen(externalResource.getURI());

+			}

+		} else {

+			stopIfCanceled(progressMonitor);

+			// TODO we can imagine creating a status, unless it's the responsability of the Strategy

+

+		}

+

+		return statusList;

+	}

+

+	/**

+	 * Ensure the current synchronization operation (represented by the given monitor) hasn't been canceled ;

+	 * if so, throws an InterruptedException.

+	 * 

+	 * @param progressMonitor

+	 *            the progressMonitor to use for determining if the operation has been canceled

+	 * @throws InterruptedException

+	 *             if the operation has been canceled

+	 */

+	private void stopIfCanceled(Monitor progressMonitor) throws InterruptedException {

+		if (progressMonitor.isCanceled()) {

+			throw new InterruptedException();

+		}

+

+	}

+

+	/**

+	 * Creates the synchronization statuses corresponding to the given list of {@link DiffElement}.

+	 * 

+	 * @param indexEntry

+	 *            the indexEntry indicating the compared resources

+	 * @param differences

+	 *            the list of {@link DiffElement} between the compared resources

+	 * @param progressMonitor

+	 *            the progress Monitor indicating if this synchronization operation has been canceled

+	 * @return a list containing the synchronization statuses corresponding to the given list of

+	 *         {@link DiffElement}

+	 * @throws InterruptedException

+	 *             if the operation has been canceled

+	 */

+	private List<CompilationStatus> createSynchronizerSatusListFromDiffModel(

+			TraceabilityIndexEntry indexEntry, List<DiffElement> differences, Monitor progressMonitor)

+			throws InterruptedException {

+		Map<IntentGenericElement, CompilationStatus> elementToSyncStatus = new HashMap<IntentGenericElement, CompilationStatus>();

+		List<CompilationStatus> statusList = new ArrayList<CompilationStatus>();

+

+		for (DiffElement difference : differences) {

+			stopIfCanceled(progressMonitor);

+			// For each synchronization status relative to the consider diffElement

+			for (CompilationStatus newStatus : SynchronizerStatusFactory.createStatusFromDiffElement(

+					indexEntry, difference)) {

+				stopIfCanceled(progressMonitor);

+

+				// If the target element has no defined synchronization satus

+				if (elementToSyncStatus.get(newStatus.getTarget()) == null) {

+					elementToSyncStatus.put(newStatus.getTarget(), newStatus);

+					statusList.add(newStatus);

+				} else {

+					// If the target element has already a synchronization status

+					// We construct a new status corresponding to the old

+					// one and the new one

+					CompilationStatus oldStatus = elementToSyncStatus.get(newStatus.getTarget());

+					statusList.remove(oldStatus);

+					oldStatus.setMessage(oldStatus.getMessage()

+							+ SynchronizerMessageProvider.getStatusSeparator() + newStatus.getMessage());

+					statusList.add(oldStatus);

+				}

+			}

+		}

+

+		return statusList;

+	}

+

+	/**

+	 * Return the resource containing the compiled model currently inspected (<b>internal</b> resource of the

+	 * repository).

+	 * 

+	 * @param adapter

+	 *            the repositoryAdapter to use for getting the repository content

+	 * @param indexEntry

+	 *            the indexEntry indicating the location of the compiled resource

+	 * @return the resource containing the compiled model currently inspected (<b>internal</b> resource of the

+	 *         repository)

+	 */

+	private Resource getInternalResource(RepositoryAdapter adapter, TraceabilityIndexEntry indexEntry) {

+		return adapter.getResource(indexEntry.getGeneratedResourcePath());

+	}

+

+	/**

+	 * Returns the resource containing the compiled model currently inspected (<b>external</b> resource of the

+	 * repository : can be in a workspace, on internet...).

+	 * 

+	 * @param indexEntry

+	 *            the indexEntry indicating the location of the compiled resource

+	 * @return the resource containing the compiled model currently inspected (<b>external</b> resource of the

+	 *         repository) - can be null if the resource doesn't exist.

+	 */

+	private Resource getExternalResource(TraceabilityIndexEntry indexEntry) {

+		ResourceSet resourceSet = new ResourceSetImpl();

+		Resource resource = null;

+		if (indexEntry.getResourceDeclaration() != null) {

+			String uri = (String)indexEntry.getResourceDeclaration().getUri();

+			uri = uri.replace("\"", "");

+			URI externalURI = URI.createURI(uri);

+

+			try {

+				resource = resourceSet.getResource(externalURI, true);

+			} catch (WrappedException e) {

+				resource = null;

+			}

+		}

+		return resource;

+	}

+

+	/**

+	 * Compares the roots of the given resources and return a list of differences.

+	 * 

+	 * @param leftResource

+	 *            the <i>"left"</i> resource of the two resources to get compared.

+	 * @param rightResource

+	 *            the <i>"right"</i> resource of the two resources to get compared.

+	 * @return a list of diffElement corresponding to all the differences between the left resources and the

+	 *         right resource

+	 * @throws InterruptedException

+	 *             if the comparison is interrupted

+	 */

+	private List<DiffElement> compareResource(Resource leftResource, Resource rightResource)

+			throws InterruptedException {

+		// TODO : treat differently models and meta-models : this match isn't efficient on

+		// simple meta-models instances

+		MatchModel matchModel = MatchService.doResourceMatch(leftResource, rightResource,

+				new HashMap<String, Object>());

+		DiffModel diff = DiffService.doDiff(matchModel, false);

+		return diff.getDifferences();

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.checkstyle b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.checkstyle
new file mode 100644
index 0000000..bf5fe67
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.checkstyle
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fileset-config file-format-version="1.2.0" simple-config="true">
+    <local-check-config name="Intent" location="/org.eclipse.mylyn.docs.intent/style/checkstyleConfiguration.xml" type="project" description="">
+        <additional-data name="protect-config-file" value="false"/>
+    </local-check-config>
+    <fileset name="tous" enabled="true" check-config-name="Intent" local="true">
+        <file-match-pattern match-pattern="." include-pattern="true"/>
+    </fileset>
+</fileset-config>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.classpath b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.project b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.project
new file mode 100644
index 0000000..5d3ed8b
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.mylyn.docs.intent.client.ui.cdo</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af3a60f
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Jul 28 10:13:11 CEST 2010

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/META-INF/MANIFEST.MF b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3ab7180
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.mylyn.docs.intent.client.ui.cdo;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-Activator: org.eclipse.mylyn.docs.intent.client.ui.cdo.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.mylyn.docs.intent.core,
+ org.eclipse.mylyn.docs.intent.collab.cdo,
+ org.eclipse.mylyn.docs.intent.collab.common,
+ org.eclipse.mylyn.docs.intent.client.compiler,
+ org.eclipse.mylyn.docs.intent.client.indexer,
+ org.eclipse.mylyn.docs.intent.client.ui
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/about.html b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/about.html
new file mode 100644
index 0000000..34ab520
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/about.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml"> 

+<head> 

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

+<title>Eclipse Foundation Software User Agreement</title> 

+</head> 

+ 

+<body lang="EN-US"> 

+<h2>Eclipse Foundation Software User Agreement</h2> 

+<p>April 14, 2010</p> 

+ 

+<h3>Usage Of Content</h3> 

+ 

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p> 

+ 

+<h3>Applicable Licenses</h3> 

+ 

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p> 

+ 

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p> 

+ 

+<ul> 

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li> 

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li> 

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li> 

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li> 

+</ul> 

+ 

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p> 

+ 

+<ul> 

+       <li>The top-level (root) directory</li> 

+       <li>Plug-in and Fragment directories</li> 

+       <li>Inside Plug-ins and Fragments packaged as JARs</li> 

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li> 

+       <li>Feature directories</li> 

+</ul> 

+ 

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p> 

+ 

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p> 

+ 

+<ul> 

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li> 

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li> 

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li> 

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li> 

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li> 

+</ul> 

+ 

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p> 

+ 

+ 

+<h3>Use of Provisioning Technology</h3> 

+ 

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a 

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a> 

+   (&quot;Specification&quot;).</p> 

+ 

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p> 

+ 

+<ol> 

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li> 

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li> 

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li> 

+</ol> 

+ 

+<h3>Cryptography</h3> 

+ 

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p> 

+ 

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p> 

+</body> 

+</html> 
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/build.properties b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/build.properties
new file mode 100644
index 0000000..71564bf
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/build.properties
@@ -0,0 +1,19 @@
+################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+################################################################################

+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               icon/,\

+               about.html,\

+               plugin.properties

+src.includes = about.html

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/icon/cdo/cdoicon.gif b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/icon/cdo/cdoicon.gif
new file mode 100644
index 0000000..229c391
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/icon/cdo/cdoicon.gif
Binary files differ
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/icon/cdo/licenses.txt b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/icon/cdo/licenses.txt
new file mode 100644
index 0000000..9b2961f
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/icon/cdo/licenses.txt
@@ -0,0 +1,5 @@
+all icons listed below are under the EPL licence and can be found at the following paths :

+

+		Intent_ICON										: Path

+=========================================================================================================================

+## cdo/cdoicon.gif										: /org.eclipse.ui.browser/icons/obj16/internal_browser.gif
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.properties b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.properties
new file mode 100644
index 0000000..066b76b
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.properties
@@ -0,0 +1,12 @@
+#################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+#################################################################################

+pluginName = Intent CDO Client

+providerName = Eclipse Mylyn
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.xml b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.xml
new file mode 100644
index 0000000..1d6538b
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/plugin.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+   <extension

+         point="org.eclipse.ui.commands">

+      <command

+            description="Intent - CDO : initialize content"

+            id="org.eclipse.mylyn.docs.intent.client.ui.cdo.init.command"

+            name="Intent - CDO : initialize content">

+      </command>

+      <command

+            description="Intent - CDO : launch all clients"

+            id="org.eclipse.mylyn.docs.intent.client.ui.cdo.launchclients.command"

+            name="Intent - CDO : launch all clients">

+      </command>

+           <command

+            description="Intent - CDO : open selection widget"

+            id="org.eclipse.mylyn.docs.intent.client.ui.cdo.selectionwidget.command"

+            name="Intent - CDO : open selection widget">

+      </command>

+   </extension>

+   

+   <extension

+         point="org.eclipse.ui.menus">

+      <menuContribution

+            allPopups="false"

+            locationURI="menu:org.eclipse.ui.main.menu?after=additions">

+         <menu

+               icon="icon/cdo/cdoicon.gif"

+               id="org.eclipse.mylyn.docs.intent.editor.modelingunitsMenu"

+               label="Intent (CDO)"

+               mnemonic="v">

+            <command

+                  commandId="org.eclipse.mylyn.docs.intent.client.ui.cdo.init.command"

+              	  icon="icon/cdo/cdoicon.gif"

+                  id="org.eclipse.mylyn.docs.intent.client.ui.cdo.init.menu"

+                  label="Initialize Content"

+                  mnemonic="O"

+                  style="push">

+            </command>

+         </menu>

+         <menu

+               icon="icon/cdo/cdoicon.gif"

+               id="org.eclipse.mylyn.docs.intent.editor.modelingunitsMenu"

+               label="Intent (CDO)"

+               mnemonic="v">

+            <command

+                  commandId="org.eclipse.mylyn.docs.intent.client.ui.cdo.launchclients.command"

+              	  icon="icon/cdo/cdoicon.gif"

+                  id="org.eclipse.mylyn.docs.intent.client.ui.cdo.launchclients.menu"

+                  label="Launch clients"

+                  mnemonic="O"

+                  style="push">

+            </command>

+         </menu>

+         <menu

+               icon="icon/cdo/cdoicon.gif"

+               id="org.eclipse.mylyn.docs.intent.editor.modelingunitsMenu"

+               label="Intent (CDO)"

+               mnemonic="v">

+            <command

+                  commandId="org.eclipse.mylyn.docs.intent.client.ui.cdo.selectionwidget.command"

+              	  icon="icon/cdo/cdoicon.gif"

+                  id="org.eclipse.mylyn.docs.intent.modelingunit.openFirstModelingUnit"

+                  label="Open element..."

+                  mnemonic="O"

+                  style="push">

+            </command>

+         </menu>

+      </menuContribution>

+   </extension>

+   

+    <extension point="org.eclipse.ui.handlers">

+      <handler class="org.eclipse.mylyn.docs.intent.client.ui.cdo.handlers.InitializeContent"

+               commandId="org.eclipse.mylyn.docs.intent.client.ui.cdo.init.command">

+      </handler>

+         <handler class="org.eclipse.mylyn.docs.intent.client.ui.cdo.handlers.LaunchAllClients"

+               commandId="org.eclipse.mylyn.docs.intent.client.ui.cdo.launchclients.command">

+      </handler>

+         <handler class="org.eclipse.mylyn.docs.intent.client.ui.cdo.handlers.ShowIndexHandler"

+               commandId="org.eclipse.mylyn.docs.intent.client.ui.cdo.selectionwidget.command">

+      </handler>

+   </extension>

+

+</plugin>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/Activator.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/Activator.java
new file mode 100644
index 0000000..1cb3422
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo;

+

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "org.eclipse.mylyn.docs.intent.client.ui.cdo"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+

+	/**

+	 * The Activator constructor.

+	 */

+	public Activator() {

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance.

+	 * 

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/InitializeContent.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/InitializeContent.java
new file mode 100644
index 0000000..4faf15e
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/InitializeContent.java
@@ -0,0 +1,42 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo.handlers;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.mylyn.docs.intent.client.ui.cdo.launcher.CDOApplicationLauncher;

+

+/**

+ * Handler that print a widget allowing the user to select the Intent element to open.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class InitializeContent extends AbstractHandler {

+

+	/**

+	 * constructor.

+	 */

+	public InitializeContent() {

+		super();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)

+	 */

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		CDOApplicationLauncher.intializeContent();

+		System.out.println("Content correctly initialized.");

+		return null;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/LaunchAllClients.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/LaunchAllClients.java
new file mode 100644
index 0000000..f7b999d
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/LaunchAllClients.java
@@ -0,0 +1,41 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo.handlers;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.mylyn.docs.intent.client.ui.cdo.launcher.CDOApplicationLauncher;

+

+/**

+ * Handler that print a widget allowing the user to select the Intent element to open.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class LaunchAllClients extends AbstractHandler {

+

+	/**

+	 * constructor.

+	 */

+	public LaunchAllClients() {

+		super();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)

+	 */

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		CDOApplicationLauncher.initializeClients();

+		return null;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/ShowIndexHandler.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/ShowIndexHandler.java
new file mode 100644
index 0000000..8cef589
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/handlers/ShowIndexHandler.java
@@ -0,0 +1,41 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo.handlers;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.mylyn.docs.intent.client.ui.cdo.launcher.CDOApplicationLauncher;

+

+/**

+ * Handler that print a widget allowing the user to select the Intent element to open.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class ShowIndexHandler extends AbstractHandler {

+

+	/**

+	 * constructor.

+	 */

+	public ShowIndexHandler() {

+		super();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)

+	 */

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		CDOApplicationLauncher.openElement();

+		return null;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/launcher/CDOApplicationLauncher.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/launcher/CDOApplicationLauncher.java
new file mode 100644
index 0000000..6ea963d
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/launcher/CDOApplicationLauncher.java
@@ -0,0 +1,199 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo.launcher;

+

+import java.io.File;

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.cdo.eresource.EresourcePackage;

+import org.eclipse.emf.cdo.session.CDOSession;

+import org.eclipse.emf.cdo.transaction.CDOTransaction;

+import org.eclipse.emf.cdo.util.CommitException;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.mylyn.docs.intent.client.compiler.launcher.CompilerCreator;

+import org.eclipse.mylyn.docs.intent.client.ui.cdo.widgets.IndexWidget;

+import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;

+import org.eclipse.mylyn.docs.intent.collab.cdo.notification.CDORepositoryChangeNotificationFactory;

+import org.eclipse.mylyn.docs.intent.collab.cdo.repository.CDOConfig;

+import org.eclipse.mylyn.docs.intent.collab.cdo.utils.CDORepositoryCreator;

+import org.eclipse.mylyn.docs.intent.collab.cdo.utils.IntentRepositoryConnectionSettingsForCDO;

+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotificationFactoryHolder;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.collab.utils.RepositoryCreatorHolder;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerPackage;

+import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnitPackage;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;

+import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerFactory;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;

+import org.eclipse.mylyn.docs.intent.parser.IntentParser;

+import org.eclipse.mylyn.docs.intent.parser.modelingunit.ParseException;

+import org.eclipse.mylyn.docs.intent.parser.modelingunit.parser.utils.FileToStringConverter;

+

+/**

+ * Launch all the clients needed by the ui application (Compiler, Synchronizer...).

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class CDOApplicationLauncher {

+

+	private static Repository repository;

+

+	/**

+	 * CDOApplicationLauncher constructor.

+	 */

+	private CDOApplicationLauncher() {

+

+	}

+

+	private static void connect() throws RepositoryConnectionException {

+		if (repository == null) {

+			CDOConfig cdoConfig = new CDOConfig(

+					IntentRepositoryConnectionSettingsForCDO.REPOSITORY_COMPLETE_ADRESS,

+					IntentRepositoryConnectionSettingsForCDO.REPOSITORY_NAME);

+			RepositoryCreatorHolder.setCreator(new CDORepositoryCreator());

+			RepositoryChangeNotificationFactoryHolder

+					.setChangeNotificationFactory(new CDORepositoryChangeNotificationFactory());

+			repository = RepositoryCreatorHolder.getCreator().createRepository(cdoConfig);

+			// repository.getPackageRegistry().put(MarkupPackage.eNS_URI, MarkupPackage.eINSTANCE);

+			repository.getPackageRegistry().put(IntentIndexerPackage.eNS_URI, IntentIndexerPackage.eINSTANCE);

+			repository.getPackageRegistry().put(CompilerPackage.eNS_URI, CompilerPackage.eINSTANCE);

+			repository.getPackageRegistry().put(IntentDocumentPackage.eNS_URI, IntentDocumentPackage.eINSTANCE);

+			repository.getPackageRegistry().put(ModelingUnitPackage.eNS_URI, ModelingUnitPackage.eINSTANCE);

+			repository.getPackageRegistry().put(DescriptionUnitPackage.eNS_URI,

+					DescriptionUnitPackage.eINSTANCE);

+			repository.getPackageRegistry().put(GenericUnitPackage.eNS_URI, GenericUnitPackage.eINSTANCE);

+

+			repository.getPackageRegistry().put(EresourcePackage.eNS_URI, EresourcePackage.eINSTANCE);

+		}

+	}

+

+	// FIXME remove hardcoded strings

+	public static void intializeContent() {

+		try {

+			connect();

+			List<String> filesToLoad = new ArrayList<String>();

+			filesToLoad

+					.add("E:/workspace/helios/org.eclipse.mylyn.docs.intent/org.eclipse.mylyn.docs.intent.client.ui.cdo/samples/document.intent");

+			initializeWithSampleContent(repository, filesToLoad);

+		} catch (RepositoryConnectionException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		}

+

+	}

+

+	/**

+	 * Launch all the clients needed by the ui application (Compiler, Synchronizer...).

+	 */

+	public static void initializeClients() {

+

+		try {

+			connect();

+		} catch (RepositoryConnectionException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		}

+

+		// Step 2 : launching all the need clients.

+		// Step 2.1 : compiler

+		Runnable runnable = new Runnable() {

+

+			public void run() {

+				try {

+

+					CompilerCreator.createCompilerClient(repository);

+				} catch (RepositoryConnectionException e) {

+					// TODO Auto-generated catch block

+					e.printStackTrace();

+				}

+			}

+		};

+		Thread t = new Thread(runnable);

+		t.start();

+

+		// Step 2.2 : indexer

+		// IndexerCreator.launchIndexer(repository);

+

+	}

+

+	public static void openElement() {

+		try {

+

+			connect();

+			IndexWidget.createIndexWidget(repository);

+		} catch (RepositoryConnectionException e) {

+			// TODO Auto-generated catch block

+			e.printStackTrace();

+		}

+	}

+

+	// FIXME remove hardcoded strings

+	private static void initializeWithSampleContent(Repository consideredRepository, List<String> filesToLoad)

+			throws RepositoryConnectionException {

+

+		CDOSession session = (CDOSession)consideredRepository.getOrCreateSession();

+		CDOTransaction transaction = session.openTransaction();

+		Resource cdoResourceIndex = transaction.getOrCreateResource(IntentLocations.GENERAL_INDEX_PATH);

+		cdoResourceIndex.getContents().add(IntentIndexerFactory.eINSTANCE.createIntentIndex());

+		Resource cdoResource = transaction.getOrCreateResource(IntentLocations.INTENT_INDEX);

+		if (cdoResource.getContents().size() == 0) {

+			cdoResource.getContents().clear();

+			try {

+				List<EObject> elementsToUpload = new ArrayList<EObject>();

+				IntentParser parser = new IntentParser();

+

+				for (String filePath : filesToLoad) {

+

+					EObject parsedObject = parser.parse(FileToStringConverter.getFileAsString(new File(

+							filePath)));

+					elementsToUpload.add(parsedObject);

+				}

+

+				for (EObject objectToCopy : elementsToUpload) {

+					cdoResource.getContents().add(EcoreUtil.copy(objectToCopy));

+					System.out.println("parsed : " + objectToCopy.eClass().getName() + "/"

+							+ objectToCopy.toString());

+

+				}

+

+				// Also creating index

+				// Resource cdoResourceIndex = transaction.getOrCreateResource("/Intent/Index");

+

+				// Step : closing the session

+				transaction.commit();

+			} catch (ParseException e1) {

+				// we don't treat this exception because it's just an example

+				System.out.println(e1);

+			} catch (IOException e1) {

+				// we don't treat this exception because it's just an example

+				System.err.println(e1);

+				IntentUiLogger.logError(e1);

+

+			} catch (CommitException e) {

+				// we do nothing because it's a sample action

+				throw new RuntimeException("Commit Exception", e);

+			}

+		} else {

+			transaction.rollback();

+		}

+		transaction.close();

+

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repositoryutils/CDORepositoryCreatorForIntent.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repositoryutils/CDORepositoryCreatorForIntent.java
new file mode 100644
index 0000000..d16ac26
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repositoryutils/CDORepositoryCreatorForIntent.java
@@ -0,0 +1,140 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo.repositoryutils;

+

+import java.util.HashSet;

+import java.util.Set;

+

+import org.eclipse.emf.cdo.eresource.EresourcePackage;

+import org.eclipse.emf.cdo.session.CDOSession;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.mylyn.docs.intent.collab.cdo.adapters.CDOAdapter;

+import org.eclipse.mylyn.docs.intent.collab.cdo.repository.CDOConfig;

+import org.eclipse.mylyn.docs.intent.collab.cdo.repository.CDORepository;

+import org.eclipse.mylyn.docs.intent.collab.cdo.utils.CDORepositoryCreator;

+import org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.ReadWriteRepositoryObjectHandlerImpl;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.elementList.ElementListAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.impl.notification.elementList.ElementListNotificator;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.Notificator;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerPackage;

+import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnitPackage;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;

+import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;

+import org.eclipse.mylyn.docs.intent.markup.markup.MarkupPackage;

+

+/**

+ * Construct Repository according to configuration files.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class CDORepositoryCreatorForIntent extends CDORepositoryCreator {

+

+	/**

+	 * The current instance of the RepositoryCreator.

+	 */

+	private static CDORepositoryCreator currentInstance;

+

+	/**

+	 * RepositoryCreator constructor.

+	 */

+	public CDORepositoryCreatorForIntent() {

+		super();

+	}

+

+	/**

+	 * Constructs an Intent Repository according to configuration files.

+	 * 

+	 * @return the constructed repository

+	 * @throws RepositoryConnectionException

+	 *             if the repository connection cannot be established

+	 */

+	public Repository createRepository() throws RepositoryConnectionException {

+		CDOConfig cdoConfig = new CDOConfig(IntentRepositoryConnectionSettingsForCDO.REPOSITORY_COMPLETE_ADRESS,

+				IntentRepositoryConnectionSettingsForCDO.REPOSITORY_NAME);

+		Repository repository = new CDORepository(cdoConfig);

+		initialisePackageRegistry(repository);

+		return repository;

+	}

+

+	/**

+	 * Initializes the package registry of the given repository.

+	 * 

+	 * @param repository

+	 *            the repository containing the package registry to initialize

+	 * @throws RepositoryConnectionException

+	 *             if the repository connection cannot be established

+	 */

+	private void initialisePackageRegistry(Repository repository) throws RepositoryConnectionException {

+		repository.getPackageRegistry().put(IntentIndexerPackage.eNS_URI, IntentIndexerPackage.eINSTANCE);

+		repository.getPackageRegistry().put(IntentDocumentPackage.eNS_URI, IntentDocumentPackage.eINSTANCE);

+		repository.getPackageRegistry().put(ModelingUnitPackage.eNS_URI, ModelingUnitPackage.eINSTANCE);

+		repository.getPackageRegistry().put(DescriptionUnitPackage.eNS_URI, DescriptionUnitPackage.eINSTANCE);

+		repository.getPackageRegistry().put(GenericUnitPackage.eNS_URI, GenericUnitPackage.eINSTANCE);

+		repository.getPackageRegistry().put(MarkupPackage.eNS_URI, MarkupPackage.eINSTANCE);

+		repository.getPackageRegistry().put(CompilerPackage.eNS_URI, CompilerPackage.eINSTANCE);

+		repository.getPackageRegistry().put(IntentDocumentPackage.eNS_URI, IntentDocumentPackage.eINSTANCE);

+		repository.getPackageRegistry().put(EresourcePackage.eNS_URI, EresourcePackage.eINSTANCE);

+

+	}

+

+	/**

+	 * Creates an handler notified of all changes made on any element of the resource at the given path.

+	 * 

+	 * @param repository

+	 *            the repository containing the listened objects

+	 * @param pathToListenedResource

+	 *            the path of the listened resource

+	 * @return a new handler that will be notified of all changes made on the element at the given path

+	 * @throws RepositoryConnectionException

+	 *             if the connection to the given repository is invalid

+	 */

+	public RepositoryObjectHandler createHandler(String pathToListenedResource, Repository repository)

+			throws RepositoryConnectionException {

+		// We first create an adapter to get the resource to listen

+		RepositoryAdapter repositoryAdapter = this.createRepositoryAdapterForRepository(repository);

+		repositoryAdapter.openSaveContext();

+		Resource resourceFromPath = repositoryAdapter.getResource(pathToListenedResource);

+

+		// We get the contained elements

+		Set<EObject> listenedElements = new HashSet<EObject>();

+		listenedElements.addAll(resourceFromPath.getContents());

+

+		// We create the handler

+		RepositoryObjectHandler elementHandler = new ReadWriteRepositoryObjectHandlerImpl(repositoryAdapter);

+		ElementListAdapter adapter = new ElementListAdapter();

+		Notificator listenedElementsNotificator = new ElementListNotificator(listenedElements, adapter);

+		elementHandler.setNotificator(listenedElementsNotificator);

+

+		return elementHandler;

+	}

+

+	/**

+	 * Create and return a RepositoryAdapter for the given repository, according to the nature of the

+	 * repository (CDO, Workspace...).

+	 * 

+	 * @param repository

+	 *            the repository to use for creating this repositoryAdapter

+	 * @return the created RepositoryAdapter for the given repository

+	 * @throws RepositoryConnectionException

+	 *             if the connection to the given repository is invalid

+	 */

+	public RepositoryAdapter createRepositoryAdapterForRepository(Repository repository)

+			throws RepositoryConnectionException {

+		return new CDOAdapter((CDOSession)repository.getOrCreateSession());

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repositoryutils/IntentRepositoryConnectionSettingsForCDO.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repositoryutils/IntentRepositoryConnectionSettingsForCDO.java
new file mode 100644
index 0000000..0806819
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/repositoryutils/IntentRepositoryConnectionSettingsForCDO.java
@@ -0,0 +1,34 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo.repositoryutils;

+

+/**

+ * Define the setting for connecting to the repository.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public interface IntentRepositoryConnectionSettingsForCDO {

+

+	/**

+	 * Address of the machine hosting the repository (for example : localhost or 192.33.33.33).

+	 */

+	String REPOSITORY_HOST_ADRESS = "192.168.30.118";

+

+	/**

+	 * Complete adress of the repository : host adress ':' [port of the repository].

+	 */

+	String REPOSITORY_COMPLETE_ADRESS = REPOSITORY_HOST_ADRESS + ":2036";

+

+	/**

+	 * Name of the repository to connect on.

+	 */

+	String REPOSITORY_NAME = "repo1";

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/widgets/IndexWidget.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/widgets/IndexWidget.java
new file mode 100644
index 0000000..b001158
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.cdo/src/org/eclipse/mylyn/docs/intent/client/ui/cdo/widgets/IndexWidget.java
@@ -0,0 +1,236 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.cdo.widgets;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.jface.viewers.ArrayContentProvider;

+import org.eclipse.jface.viewers.ComboViewer;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.jface.viewers.LabelProvider;

+import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;

+import org.eclipse.mylyn.docs.intent.client.ui.utils.IntentEditorOpener;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.collab.utils.RepositoryCreatorHolder;

+import org.eclipse.mylyn.docs.intent.core.document.IntentChapter;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocument;

+import org.eclipse.mylyn.docs.intent.core.document.IntentSection;

+import org.eclipse.mylyn.docs.intent.core.document.IntentStructuredElement;

+import org.eclipse.mylyn.docs.intent.core.document.IntentSubSectionContainer;

+import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnit;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnit;

+import org.eclipse.swt.SWT;

+import org.eclipse.swt.events.SelectionAdapter;

+import org.eclipse.swt.events.SelectionEvent;

+import org.eclipse.swt.graphics.Point;

+import org.eclipse.swt.layout.FillLayout;

+import org.eclipse.swt.layout.FormAttachment;

+import org.eclipse.swt.layout.FormData;

+import org.eclipse.swt.layout.FormLayout;

+import org.eclipse.swt.widgets.Button;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Shell;

+import org.eclipse.ui.PartInitException;

+import org.eclipse.ui.PlatformUI;

+

+/**

+ * Creates a selection widget allowing the userallowing the user to select the Intent element to

+ * open.

+ * 

+ * @author <a href="mailto:william.piers@obeo.fr">William Piers</a>

+ */

+public final class IndexWidget {

+

+	private static final int SHELL_HEIGHT = 100;

+

+	private static final int SHELL_WIDTH = 400;

+

+	/**

+	 * SelectionWidget constructor.

+	 */

+	private IndexWidget() {

+

+	}

+

+	/**

+	 * Creates a selection widget allowing the user to choose between all modeling units in the cdo repository

+	 * and open an editor on it.

+	 * 

+	 * @param repository

+	 *            The repository to use for this widget and for the launched editor

+	 * @throws RepositoryConnectionException

+	 *             if a connection to the repository cannot be made.

+	 */

+	public static void createIndexWidget(final Repository repository) throws RepositoryConnectionException {

+

+		try {

+			// Step 1 : we initialize the connection and the list of the modeling units

+			final RepositoryAdapter repositoryAdapter = RepositoryCreatorHolder.getCreator()

+					.createRepositoryAdapterForRepository(repository);

+			repositoryAdapter.openReadOnlyContext();

+			List<EObject> elementsList = getIntentElementsList(repositoryAdapter);

+

+			// Step 2 : creation of the selection widget

+			final Shell shell = new Shell(getShell());

+

+			shell.setLayout(new FillLayout());

+			shell.setSize(new Point(SHELL_WIDTH, SHELL_HEIGHT));

+			shell.setToolTipText("Please select the Intent Element you which to open");

+

+			Composite composite = new Composite(shell, SWT.BORDER);

+			composite.setLayout(new FormLayout());

+

+			final int padding = -5;

+

+			Button ok = new Button(composite, SWT.PUSH);

+			ok.setText("Ok");

+			FormData formData = new FormData();

+			formData.right = new FormAttachment(100, padding);

+			formData.bottom = new FormAttachment(100, padding);

+			ok.setLayoutData(formData);

+

+			Button cancel = new Button(composite, SWT.PUSH);

+			cancel.setText("Cancel");

+			formData = new FormData();

+			formData.right = new FormAttachment(ok, padding);

+			formData.bottom = new FormAttachment(100, padding);

+			cancel.setLayoutData(formData);

+

+			Composite cvComposite = new Composite(composite, SWT.NONE);

+			cvComposite.setLayout(new FillLayout());

+

+			final ComboViewer comboViewer = new ComboViewer(cvComposite, SWT.BORDER);

+

+			// TODO make a better input, content provider and label provider (using for instance the outline)

+			comboViewer.setContentProvider(new ArrayContentProvider());

+			comboViewer.setInput(elementsList);

+

+			// creation of a label provider that print the name of each

+			comboViewer.setLabelProvider(new LabelProvider() {

+				@Override

+				public String getText(Object element) {

+					if (element instanceof ModelingUnit) {

+						return ((ModelingUnit)element).getUnitName();

+					} else {

+						return element.toString();

+					}

+				}

+			});

+

+			formData = new FormData();

+			formData.top = new FormAttachment(0, 5);

+			formData.bottom = new FormAttachment(cancel, padding);

+			formData.left = new FormAttachment(0, 5);

+			formData.right = new FormAttachment(100, padding);

+			cvComposite.setLayoutData(formData);

+

+			// Selection listener : when the user presses "ok",

+			// get the selected modeling unit and open an editor using the cdo id.

+			ok.addSelectionListener(new SelectionAdapter() {

+

+				public void widgetSelected(SelectionEvent e) {

+					ISelection selection = comboViewer.getSelection();

+					if (selection instanceof IStructuredSelection) {

+						IStructuredSelection structSelection = (IStructuredSelection)selection;

+						Object element = structSelection.getFirstElement();

+						if ((element instanceof GenericUnit)

+								|| (element instanceof IntentStructuredElement)) {

+							shell.close();

+							try {

+								IntentEditorOpener.openIntentEditor(repository,

+										repositoryAdapter.getIDFromElement((EObject)element), false, false);

+							} catch (PartInitException exception) {

+								IntentUiLogger.logError(exception);

+							}

+						}

+					}

+

+				}

+			});

+

+			cancel.addSelectionListener(new SelectionAdapter() {

+				/**

+				 * {@inheritDoc}

+				 * 

+				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)

+				 */

+				@Override

+				public void widgetSelected(SelectionEvent e) {

+					shell.close();

+				}

+			});

+

+			shell.open();

+

+			repositoryAdapter.closeContext();

+

+		} catch (RepositoryConnectionException e1) {

+			throw e1;

+		}

+	}

+

+	/**

+	 * Returns a list containing all the modeling units located on the repository.

+	 * 

+	 * @param repositoryAdapter

+	 *            the view to use to interract with the repository.

+	 * @return a list containing all the modeling units located on the repository

+	 */

+	private static List<EObject> getIntentElementsList(RepositoryAdapter repositoryAdapter) {

+		// TODO Find a better way (using identifier seems irrelevant now that we don't use CDO

+		// TODO The index seems to be the best way to do it

+		List<EObject> identifierList = new ArrayList<EObject>();

+

+		// FIXME remove harcoded strings

+		// Get or create resource

+		Resource resourceIndex = repositoryAdapter.getResource("/Intent/ModelingUnits/ModelingUnit1");

+		for (EObject object : resourceIndex.getContents()) {

+			identifierList.add(object);

+			if (object instanceof IntentSubSectionContainer) {

+				for (GenericUnit unit : ((IntentSubSectionContainer)object).getUnits()) {

+					if (!identifierList.contains(unit)) {

+						identifierList.add(unit);

+					}

+				}

+			}

+			if (object instanceof IntentDocument) {

+				for (IntentChapter chapter : ((IntentDocument)object).getChapters()) {

+					identifierList.add(chapter);

+					for (IntentSection section : chapter.getSubSections()) {

+						identifierList.add(section);

+						identifierList.addAll(section.getUnits());

+						for (IntentSection subSection : section.getSubSections()) {

+							identifierList.add(section);

+							identifierList.addAll(subSection.getUnits());

+						}

+					}

+				}

+			}

+		}

+

+		return identifierList;

+	}

+

+	/**

+	 * Returns the current shell.

+	 * 

+	 * @return the current shell

+	 */

+	public static Shell getShell() {

+		return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.checkstyle b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.checkstyle
new file mode 100644
index 0000000..bf5fe67
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.checkstyle
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fileset-config file-format-version="1.2.0" simple-config="true">
+    <local-check-config name="Intent" location="/org.eclipse.mylyn.docs.intent/style/checkstyleConfiguration.xml" type="project" description="">
+        <additional-data name="protect-config-file" value="false"/>
+    </local-check-config>
+    <fileset name="tous" enabled="true" check-config-name="Intent" local="true">
+        <file-match-pattern match-pattern="." include-pattern="true"/>
+    </fileset>
+</fileset-config>
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.classpath b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.project b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.project
new file mode 100644
index 0000000..6c616f2
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.project
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.mylyn.docs.intent.client.ui.ide</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>

+		<nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>

+	</natures>

+</projectDescription>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2fd29be
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Jul 28 17:23:25 CEST 2010

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

+org.eclipse.jdt.core.compiler.compliance=1.5

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.5

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/META-INF/MANIFEST.MF b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7c8e816
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.mylyn.docs.intent.client.ui.ide;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-Activator: org.eclipse.mylyn.docs.intent.client.ui.ide.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.mylyn.docs.intent.core,
+ org.eclipse.mylyn.docs.intent.collab.ide,
+ org.eclipse.mylyn.docs.intent.collab.common,
+ org.eclipse.mylyn.docs.intent.client.ui,
+ org.eclipse.mylyn.docs.intent.client.compiler,
+ org.eclipse.mylyn.docs.intent.client.indexer,
+ org.eclipse.mylyn.docs.intent.client.synchronizer,
+ org.eclipse.ui.navigator;bundle-version="3.5.0",
+ org.eclipse.ui.navigator.resources;bundle-version="3.4.200"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/about.html b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/about.html
new file mode 100644
index 0000000..34ab520
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/about.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml"> 

+<head> 

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

+<title>Eclipse Foundation Software User Agreement</title> 

+</head> 

+ 

+<body lang="EN-US"> 

+<h2>Eclipse Foundation Software User Agreement</h2> 

+<p>April 14, 2010</p> 

+ 

+<h3>Usage Of Content</h3> 

+ 

+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS

+   (COLLECTIVELY &quot;CONTENT&quot;).  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND

+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE

+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR

+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND

+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p> 

+ 

+<h3>Applicable Licenses</h3> 

+ 

+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0

+   (&quot;EPL&quot;).  A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.

+   For purposes of the EPL, &quot;Program&quot; will mean the Content.</p> 

+ 

+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code

+   repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p> 

+ 

+<ul> 

+       <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content.  Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li> 

+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li> 

+       <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.  Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;.  Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins

+      and/or Fragments associated with that Feature.</li> 

+       <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li> 

+</ul> 

+ 

+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and

+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;).  Abouts and Feature Licenses may be located in any directory of a Download or Module

+including, but not limited to the following locations:</p> 

+ 

+<ul> 

+       <li>The top-level (root) directory</li> 

+       <li>Plug-in and Fragment directories</li> 

+       <li>Inside Plug-ins and Fragments packaged as JARs</li> 

+       <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li> 

+       <li>Feature directories</li> 

+</ul> 

+ 

+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the

+installation process.  If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or

+inform you where you can locate them.  Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.

+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in

+that directory.</p> 

+ 

+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.  SOME OF THESE

+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p> 

+ 

+<ul> 

+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li> 

+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li> 

+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li> 

+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li> 

+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li> 

+</ul> 

+ 

+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, or Feature Update License is provided, please

+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p> 

+ 

+ 

+<h3>Use of Provisioning Technology</h3> 

+ 

+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse

+   Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or

+   other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to

+   install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a 

+       href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a> 

+   (&quot;Specification&quot;).</p> 

+ 

+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the

+   applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology

+   in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the

+   Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p> 

+ 

+<ol> 

+       <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology

+       on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based

+       product.</li> 

+       <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be

+       accessed and copied to the Target Machine.</li> 

+       <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable

+       Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target

+       Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern

+       the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such

+       indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li> 

+</ol> 

+ 

+<h3>Cryptography</h3> 

+ 

+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to

+   another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,

+   possession, or use, and re-export of encryption software, to see if this is permitted.</p> 

+ 

+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p> 

+</body> 

+</html> 
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/build.properties b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/build.properties
new file mode 100644
index 0000000..71564bf
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/build.properties
@@ -0,0 +1,19 @@
+################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+################################################################################

+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml,\

+               icon/,\

+               about.html,\

+               plugin.properties

+src.includes = about.html

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/licenses.txt b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/licenses.txt
new file mode 100644
index 0000000..f82be2e
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/licenses.txt
@@ -0,0 +1,7 @@
+all icons listed below are under the EPL licence and can be found at the following paths :

+

+		Intent_ICON										: Path

+=========================================================================================================================

+## ide/nature.gif										:  [RESIZED] /org.eclipse.ui.forms.examples/icons/container_obj.gif

+## ide/toggle_nature.gif								: /org.eclipse.ui.forms.examples/icons/container_obj.gif

+## workspaceicon.gif									: /org.eclipse.help.ui/icons/etool16/eclipse.gif
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/nature.gif b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/nature.gif
new file mode 100644
index 0000000..20101e3
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/nature.gif
Binary files differ
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/toggle_nature.gif b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/toggle_nature.gif
new file mode 100644
index 0000000..f32c28d
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/toggle_nature.gif
Binary files differ
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/workspaceicon.gif b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/workspaceicon.gif
new file mode 100644
index 0000000..eb7b90c
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/icon/ide/workspaceicon.gif
Binary files differ
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.properties b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.properties
new file mode 100644
index 0000000..9dd6e91
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.properties
@@ -0,0 +1,12 @@
+#################################################################################

+# Copyright (c) 2010, 2011 Obeo.

+# 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:

+#     Obeo - initial API and implementation

+#################################################################################

+pluginName = Intent IDE Client

+providerName = Eclipse Mylyn
\ No newline at end of file
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.xml b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.xml
new file mode 100644
index 0000000..d760f9c
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/plugin.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<plugin>

+ <extension

+         point="org.eclipse.ui.commands">

+      <command

+            description="Intent - workspace : initialize content"

+            id="org.eclipse.mylyn.docs.intent.client.ui.workspace.init.command"

+            name="Intent - workspace : initialize content">

+      </command>

+      <command

+            description="Intent - workspace : launch all clients"

+            id="org.eclipse.mylyn.docs.intent.client.ui.workspace.launchclients.command"

+            name="Intent - workspace : launch all clients">

+      </command>

+           <command

+            description="Intent - workspace : open selection widget"

+            id="org.eclipse.mylyn.docs.intent.client.ui.workspace.selectionwidget.command"

+            name="Intent - workspace : open selection widget">

+      </command>

+   </extension>

+   

+   <extension

+         point="org.eclipse.ui.menus">

+      <menuContribution

+            allPopups="false"

+            locationURI="menu:org.eclipse.ui.main.menu?after=additions">

+         <menu

+               icon="icon/ide/workspaceicon.gif"

+               id="org.eclipse.mylyn.docs.intent.editor.modelingunitsMenu"

+               label="Intent (workspace)"

+               mnemonic="v">

+            <command

+                  commandId="org.eclipse.mylyn.docs.intent.client.ui.workspace.init.command"

+              	  icon="icon/ide/workspaceicon.gif"

+                  id="org.eclipse.mylyn.docs.intent.client.ui.workspace.init.menu"

+                  label="Initialize Content"

+                  mnemonic="O"

+                  style="push">

+            </command>

+         </menu>

+         <menu

+              icon="icon/ide/workspaceicon.gif"

+               id="org.eclipse.mylyn.docs.intent.editor.modelingunitsMenu"

+               label="Intent (workspace)"

+               mnemonic="v">

+            <command

+                  commandId="org.eclipse.mylyn.docs.intent.client.ui.workspace.launchclients.command"

+              	icon="icon/ide/workspaceicon.gif"

+                  id="org.eclipse.mylyn.docs.intent.client.ui.workspace.launchclients.menu"

+                  label="Launch clients"

+                  mnemonic="O"

+                  style="push">

+            </command>

+         </menu>

+         <menu

+              icon="icon/ide/workspaceicon.gif"

+               id="org.eclipse.mylyn.docs.intent.editor.modelingunitsMenu"

+               label="Intent (workspace)"

+               mnemonic="v">

+            <command

+                  commandId="org.eclipse.mylyn.docs.intent.client.ui.workspace.selectionwidget.command"

+              	icon="icon/ide/workspaceicon.gif"

+                  id="org.eclipse.mylyn.docs.intent.modelingunit.openFirstModelingUnit"

+                  label="Open element..."

+                  mnemonic="O"

+                  style="push">

+            </command>

+         </menu>

+      </menuContribution>

+   </extension>

+   

+    <extension point="org.eclipse.ui.handlers">

+      <handler class="org.eclipse.mylyn.docs.intent.client.ui.ide.handlers.InitializeContent"

+               commandId="org.eclipse.mylyn.docs.intent.client.ui.workspace.init.command">

+      </handler>

+         <handler class="org.eclipse.mylyn.docs.intent.client.ui.ide.handlers.LaunchAllClients"

+               commandId="org.eclipse.mylyn.docs.intent.client.ui.workspace.launchclients.command">

+      </handler>

+         <handler class="org.eclipse.mylyn.docs.intent.client.ui.ide.handlers.ShowIndexHandler"

+               commandId="org.eclipse.mylyn.docs.intent.client.ui.workspace.selectionwidget.command">

+      </handler>

+   </extension>

+   

+   

+   <!-- EXTENSIONS OF THE PROJECT EXPLORER -->

+    <extension

+          point="org.eclipse.ui.navigator.viewer">

+        <viewer

+              helpContext="org.eclipse.ui.navigator.ProjectExplorer.help"

+              inheritBindingsFromViewer="org.eclipse.ui.navigator.ProjectExplorer"

+              viewerId="org.eclipse.ui.navigator.ProjectExplorer">

+       </viewer>

+       <viewerContentBinding

+             viewerId="org.eclipse.ui.navigator.ProjectExplorer">

+          <includes>

+             <contentExtension

+                   isRoot="false"

+                   pattern="org.eclipse.mylyn.docs.intent.client.ui.ide.RepositoryContent">

+             </contentExtension>

+          </includes>

+       </viewerContentBinding>

+     

+    </extension>

+    <extension

+          point="org.eclipse.ui.navigator.navigatorContent">

+       <navigatorContent

+             activeByDefault="true"

+             contentProvider="org.eclipse.mylyn.docs.intent.client.ui.ide.navigator.RepositoryContentProvider"

+             icon="icon/ide/workspaceicon.gif"

+             id="org.eclipse.mylyn.docs.intent.client.ui.ide.RepositoryContent"

+             labelProvider="org.eclipse.mylyn.docs.intent.client.ui.ide.navigator.RepositoryLabelProvider"

+             name="Repository Content"

+             priority="highest"

+             providesSaveables="false">

+          <triggerPoints>

+ 			<or>

+            	<adapt type="org.eclipse.core.resources.IProject">

+                	<and>

+                    	<test

+                        	property="org.eclipse.core.resources.projectNature"

+                            value="org.eclipse.mylyn.docs.intent.client.ui.ide.intentNature">

+                        </test>

+                    </and>

+                </adapt>                

+            </or>

+          </triggerPoints>

+ 		<possibleChildren>

+        	<or>

+            <instanceof

+                  value="org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex">

+            </instanceof>

+            <instanceof

+                  value="org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexEntry">

+            </instanceof>         

+        	</or>

+     	</possibleChildren>

+          <actionProvider

+                class="org.eclipse.mylyn.docs.intent.client.ui.ide.navigator.RepositoryActionProvider">

+          </actionProvider>

+       </navigatorContent>

+    </extension>

+    <extension

+          point="org.eclipse.ui.popupMenus">

+       <objectContribution

+             adaptable="true"

+             id="org.eclipse.mylyn.docs.intent.client.ui.ide.contribution1"

+             nameFilter="*"

+             objectClass="org.eclipse.core.resources.IProject">

+          <action

+                class="org.eclipse.mylyn.docs.intent.client.ui.ide.builder.ToggleNatureAction"

+                enablesFor="+"

+                icon="icon/ide/toggle_nature.gif"

+                id="org.eclipse.mylyn.docs.intent.client.ui.ide.addRemoveNatureAction"

+                label="Add/Remove Intent Nature"

+                menubarPath="additions">

+          </action>

+       </objectContribution>

+    </extension>

+    <extension

+          id="intentBuilder"

+          name="Intent Project Builder"

+          point="org.eclipse.core.resources.builders">

+       <builder

+             hasNature="true">

+          <run

+                class="org.eclipse.mylyn.docs.intent.client.ui.ide.builder.IntentBuilder">

+          </run>

+       </builder>

+    </extension>

+    <extension

+          id="intentNature"

+          name="Intent Project Nature"

+          point="org.eclipse.core.resources.natures">

+       <runtime>

+          <run

+                class="org.eclipse.mylyn.docs.intent.client.ui.ide.builder.IntentNature">

+          </run>

+       </runtime>

+       <builder

+             id="org.eclipse.mylyn.docs.intent.client.ui.ide.intentBuilder">

+       </builder>

+    </extension>

+    <extension

+          id="xmlProblem"

+          name="XML Problem"

+          point="org.eclipse.core.resources.markers">

+       <super

+             type="org.eclipse.core.resources.problemmarker">

+       </super>

+       <persistent

+             value="true">

+       </persistent>

+    </extension>

+    <extension

+          point="org.eclipse.ui.ide.projectNatureImages">

+       <image

+             icon="icon/ide/nature.gif"

+             id="org.eclipse.mylyn.docs.intent.client.ui.ide.intentNatureImage"

+             natureId="org.eclipse.mylyn.docs.intent.client.ui.ide.intentNature">

+       </image>

+    </extension>

+   

+   

+   

+   

+

+</plugin>

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/Activator.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/Activator.java
new file mode 100644
index 0000000..0f7a6c4
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/Activator.java
@@ -0,0 +1,64 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.ide;

+

+import org.eclipse.ui.plugin.AbstractUIPlugin;

+import org.osgi.framework.BundleContext;

+

+/**

+ * The activator class controls the plug-in life cycle.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class Activator extends AbstractUIPlugin {

+

+	// The plug-in ID

+	public static final String PLUGIN_ID = "org.eclipse.mylyn.docs.intent.client.ui.ide"; //$NON-NLS-1$

+

+	// The shared instance

+	private static Activator plugin;

+

+	/**

+	 * The constructor.

+	 */

+	public Activator() {

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)

+	 */

+	public void start(BundleContext context) throws Exception {

+		super.start(context);

+		plugin = this;

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)

+	 */

+	public void stop(BundleContext context) throws Exception {

+		plugin = null;

+		super.stop(context);

+	}

+

+	/**

+	 * Returns the shared instance.

+	 * 

+	 * @return the shared instance

+	 */

+	public static Activator getDefault() {

+		return plugin;

+	}

+

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentBuilder.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentBuilder.java
new file mode 100644
index 0000000..a66382f
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentBuilder.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.intent.client.ui.ide.builder;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * Intent project builder.
+ * 
+ * @author <a href="mailto:william.piers@obeo.fr">William Piers</a>
+ */
+public class IntentBuilder extends IncrementalProjectBuilder {
+
+	/**
+	 * The project delta visitor.
+	 */
+	class IntentDeltaVisitor implements IResourceDeltaVisitor {
+		/**
+		 * {@inheritDoc}
+		 * 
+		 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
+		 */
+		public boolean visit(IResourceDelta delta) throws CoreException {
+			IResource resource = delta.getResource();
+			switch (delta.getKind()) {
+				case IResourceDelta.ADDED:
+					// handle added resource
+					break;
+				case IResourceDelta.REMOVED:
+					// handle removed resource
+					break;
+				case IResourceDelta.CHANGED:
+					// handle changed resource
+					break;
+				default:
+					break;
+			}
+			// return true to continue visiting children.
+			return true;
+		}
+	}
+
+	/**
+	 * The intent resource visitor.
+	 */
+	class IntentResourceVisitor implements IResourceVisitor {
+		/** 
+		 * {@inheritDoc}
+		 *
+		 * @see org.eclipse.core.resources.IResourceVisitor#visit(org.eclipse.core.resources.IResource)
+		 */
+		public boolean visit(IResource resource) {
+			// return true to continue visiting children.
+			return true;
+		}
+	}
+
+	public static final String BUILDER_ID = "org.eclipse.mylyn.docs.intent.client.ui.ide.intentBuilder";
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.resources.IncrementalProjectBuilder#build(int, java.util.Map,
+	 *      org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
+		if (kind == FULL_BUILD) {
+			fullBuild(monitor);
+		} else {
+			IResourceDelta delta = getDelta(getProject());
+			if (delta == null) {
+				fullBuild(monitor);
+			} else {
+				incrementalBuild(delta, monitor);
+			}
+		}
+		return null;
+	}
+
+	protected void fullBuild(final IProgressMonitor monitor) throws CoreException {
+		try {
+			getProject().accept(new IntentResourceVisitor());
+		} catch (CoreException e) {
+			// do nothing
+		}
+	}
+
+	protected void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) throws CoreException {
+		// the visitor does the work.
+		delta.accept(new IntentDeltaVisitor());
+	}
+}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentNature.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentNature.java
new file mode 100644
index 0000000..9dba78b
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/IntentNature.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.intent.client.ui.ide.builder;
+
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IProjectNature;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * The Intent Project nature.
+ * 
+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
+ */
+public class IntentNature implements IProjectNature {
+
+	/**
+	 * ID of this project nature.
+	 */
+	public static final String NATURE_ID = "org.eclipse.mylyn.docs.intent.client.ui.ide.intentNature";
+
+	private IProject project;
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.resources.IProjectNature#configure()
+	 */
+	public void configure() throws CoreException {
+		IProjectDescription desc = project.getDescription();
+		ICommand[] commands = desc.getBuildSpec();
+
+		for (int i = 0; i < commands.length; ++i) {
+			if (commands[i].getBuilderName().equals(IntentBuilder.BUILDER_ID)) {
+				return;
+			}
+		}
+
+		ICommand[] newCommands = new ICommand[commands.length + 1];
+		System.arraycopy(commands, 0, newCommands, 0, commands.length);
+		ICommand command = desc.newCommand();
+		command.setBuilderName(IntentBuilder.BUILDER_ID);
+		newCommands[newCommands.length - 1] = command;
+		desc.setBuildSpec(newCommands);
+		project.setDescription(desc, null);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.resources.IProjectNature#deconfigure()
+	 */
+	public void deconfigure() throws CoreException {
+		IProjectDescription description = getProject().getDescription();
+		ICommand[] commands = description.getBuildSpec();
+		for (int i = 0; i < commands.length; ++i) {
+			if (commands[i].getBuilderName().equals(IntentBuilder.BUILDER_ID)) {
+				ICommand[] newCommands = new ICommand[commands.length - 1];
+				System.arraycopy(commands, 0, newCommands, 0, i);
+				System.arraycopy(commands, i + 1, newCommands, i, commands.length - i - 1);
+				description.setBuildSpec(newCommands);
+				return;
+			}
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.resources.IProjectNature#getProject()
+	 */
+	public IProject getProject() {
+		return project;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.core.resources.IProjectNature#setProject(org.eclipse.core.resources.IProject)
+	 */
+	public void setProject(IProject project) {
+		this.project = project;
+	}
+
+}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/ToggleNatureAction.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/ToggleNatureAction.java
new file mode 100644
index 0000000..3b604fb
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/builder/ToggleNatureAction.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Obeo.
+ * 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:
+ *     Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.docs.intent.client.ui.ide.builder;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * Allows to toggle intent nature on projects.
+ * 
+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
+ */
+public class ToggleNatureAction implements IObjectActionDelegate {
+
+	private ISelection selection;
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		if (selection instanceof IStructuredSelection) {
+			for (Iterator it = ((IStructuredSelection)selection).iterator(); it.hasNext();) {
+				Object element = it.next();
+				IProject project = null;
+				if (element instanceof IProject) {
+					project = (IProject)element;
+				} else if (element instanceof IAdaptable) {
+					project = (IProject)((IAdaptable)element).getAdapter(IProject.class);
+				}
+				if (project != null) {
+					toggleNature(project);
+				}
+			}
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection currentSelection) {
+		this.selection = currentSelection;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
+	 *      org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+	}
+
+	/**
+	 * Toggles intent nature on a project.
+	 * 
+	 * @param project
+	 *            to have intent nature added or removed
+	 */
+	private void toggleNature(IProject project) {
+		try {
+			IProjectDescription description = project.getDescription();
+			String[] natures = description.getNatureIds();
+
+			for (int i = 0; i < natures.length; ++i) {
+				if (IntentNature.NATURE_ID.equals(natures[i])) {
+					// Remove the nature
+					String[] newNatures = new String[natures.length - 1];
+					System.arraycopy(natures, 0, newNatures, 0, i);
+					System.arraycopy(natures, i + 1, newNatures, i, natures.length - i - 1);
+					description.setNatureIds(newNatures);
+					project.setDescription(description, null);
+					return;
+				}
+			}
+
+			// Add the nature
+			String[] newNatures = new String[natures.length + 1];
+			System.arraycopy(natures, 0, newNatures, 0, natures.length);
+			newNatures[natures.length] = IntentNature.NATURE_ID;
+			description.setNatureIds(newNatures);
+			project.setDescription(description, null);
+		} catch (CoreException e) {
+			// do nothing
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/generatedelementlistener/IDEGeneratedElementListener.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/generatedelementlistener/IDEGeneratedElementListener.java
new file mode 100644
index 0000000..cd7e5c5
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/generatedelementlistener/IDEGeneratedElementListener.java
@@ -0,0 +1,131 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.ide.generatedelementlistener;

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.core.resources.IResourceChangeEvent;

+import org.eclipse.core.resources.IResourceChangeListener;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IWorkspace;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.listeners.AbstractGeneratedElementListener;

+

+/**

+ * Listens all the generated element (must be on the workspace) and warn the synchronizer when one of them

+ * change.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class IDEGeneratedElementListener extends AbstractGeneratedElementListener implements IResourceChangeListener {

+

+	private Collection<URI> resourcesToIgnore;

+

+	/**

+	 * IDEGeneratedElementListener constructor.

+	 */

+	public IDEGeneratedElementListener() {

+		super();

+		IWorkspace workspace = ResourcesPlugin.getWorkspace();

+		workspace.addResourceChangeListener(this);

+		resourcesToIgnore = new ArrayList<URI>();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)

+	 */

+	public void resourceChanged(IResourceChangeEvent event) {

+		if (event.getType() == IResourceChangeEvent.POST_CHANGE) {

+			final IResourceDelta rootDelta = event.getDelta();

+			// We get the delta related to the Repository (if any)

+

+			// If any resource of the repository has changed

+			if (rootDelta != null) {

+

+				// We launch the analysis of the delta in a new thread

+				Runnable runnable = new Runnable() {

+

+					public void run() {

+						analyseWorkspaceDelta(rootDelta);

+					}

+				};

+				Thread t = new Thread(runnable);

+				t.start();

+

+			}

+		}

+	}

+

+	/**

+	 * Analyzes the given IResourceDelta in a new thread ; reloads the resources if needed and send

+	 * notification to the registered Session listeners.

+	 * 

+	 * @param repositoryDelta

+	 *            the IResourceDelta to analyse

+	 */

+	private void analyseWorkspaceDelta(IResourceDelta repositoryDelta) {

+

+		// We first create a DeltaVisitor on the repository Path

+		final IDEGeneratedElementListenerDeltaVisitor visitor = new IDEGeneratedElementListenerDeltaVisitor(

+				this.listenedElementsURIs);

+		try {

+			// We visit the given delta using this visitor

+			repositoryDelta.accept(visitor);

+

+			// We get the changed and removed Resources

+			Collection<URI> removedResources = new ArrayList<URI>();

+			Collection<URI> changedResources = new ArrayList<URI>();

+

+			if (!visitor.getRemovedResources().isEmpty()) {

+				removedResources.addAll(visitor.getRemovedResources());

+			}

+

+			for (URI changedResource : visitor.getChangedResources()) {

+				// If the resource is contained in the resourcesToIgnore list, it means

+				// that we should ignore this notification ; however we remove this resource

+				// from this list so that we'll treat the next notifications

+				if (!resourcesToIgnore.contains(changedResource)) {

+					changedResources.add(changedResource);

+					// resourcesToIgnore.add(changedResource);

+				} else {

+					resourcesToIgnore.remove(changedResource);

+				}

+			}

+

+			// Finally, we treat each removed or changed resource.

+			treatChangeResources(changedResources);

+

+		} catch (CoreException e) {

+			// TODO define a standard reaction to this exception :

+			// - relaunch the session

+			// - try to visit the delta again

+			// - do nothing

+		}

+	}

+

+	/**

+	 * Sends a notification to the synchronizer for each detected changedResource.

+	 * 

+	 * @param changedResources

+	 *            the list of listened resources that have changed

+	 */

+	private void treatChangeResources(Collection<URI> changedResources) {

+		// TODO construct a proper change Notification

+		if (!changedResources.isEmpty()) {

+			this.synchronizer.handleChangeNotification(null);

+		}

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/generatedelementlistener/IDEGeneratedElementListenerDeltaVisitor.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/generatedelementlistener/IDEGeneratedElementListenerDeltaVisitor.java
new file mode 100644
index 0000000..f878464
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/generatedelementlistener/IDEGeneratedElementListenerDeltaVisitor.java
@@ -0,0 +1,122 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.ide.generatedelementlistener;

+

+import java.util.ArrayList;

+import java.util.Collection;

+

+import org.eclipse.core.resources.IResource;

+import org.eclipse.core.resources.IResourceDelta;

+import org.eclipse.core.resources.IResourceDeltaVisitor;

+import org.eclipse.emf.common.util.URI;

+

+/**

+ * Visits a resource delta and detects the listened changed or removed resources.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class IDEGeneratedElementListenerDeltaVisitor implements IResourceDeltaVisitor {

+	/**

+	 * All the EMF resource of the WorkspaceRepository that have changed.

+	 */

+	protected Collection<URI> changedResources;

+

+	/**

+	 * All the EMF resource of the WorkspaceRepository that have been removed of this repository.

+	 */

+	protected Collection<URI> removedResources;

+

+	private ArrayList<URI> listennedElementsURIs;

+

+	/**

+	 * IDEGeneratedElementListenerDeltaVisitor constructor.

+	 * 

+	 * @param listenedElementsURIs

+	 *            the list of listened element's URIs

+	 */

+	public IDEGeneratedElementListenerDeltaVisitor(ArrayList<URI> listenedElementsURIs) {

+		this.listennedElementsURIs = listenedElementsURIs;

+		changedResources = new ArrayList<URI>();

+		removedResources = new ArrayList<URI>();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)

+	 */

+	public boolean visit(IResourceDelta delta) {

+

+		if (delta.getResource().getType() != IResource.FILE) {

+			return true;

+		}

+

+		if (isRelevantModification(delta)) {

+

+			// We first calculate the repository relative path for this resource

+			String uri = delta.getFullPath().toString();

+			URI changedResourceURI = URI.createPlatformResourceURI(uri, false);

+

+			if ((changedResourceURI != null) && (listennedElementsURIs.contains(changedResourceURI))) {

+				switch (delta.getKind()) {

+					case IResourceDelta.REMOVED:

+						removedResources.add(changedResourceURI);

+						break;

+

+					case IResourceDelta.ADDED:

+					case IResourceDelta.CHANGED:

+						changedResources.add(changedResourceURI);

+						break;

+

+					default:

+						break;

+				}

+			}

+

+		}

+

+		return true;

+	}

+

+	/**

+	 * Indicates if the given delta describes a relevant modification.

+	 * 

+	 * @param delta

+	 *            the visited delta

+	 * @return true if the given delta describes a relevant modification false otherwise

+	 */

+	private boolean isRelevantModification(IResourceDelta delta) {

+		// First of all, we test if this delta describes an deletion, an addition or a modification

+		boolean isRelevantModification = (delta.getKind() == IResourceDelta.REMOVED)

+				|| (delta.getKind() == IResourceDelta.CHANGED) || delta.getKind() == IResourceDelta.ADDED;

+		// The we ensure that this delta isn't a touch or a marker modification

+		isRelevantModification = isRelevantModification && ((delta.getFlags() & IResourceDelta.MARKERS) == 0);

+		return isRelevantModification;

+	}

+

+	/**

+	 * Returns the list of changed Resources's URIs.

+	 * 

+	 * @return the list of changed Resources 's URIs

+	 */

+	public Collection<URI> getChangedResources() {

+		return changedResources;

+	}

+

+	/**

+	 * Returns the list of removed Resources's URIs.

+	 * 

+	 * @return the list of removed Resources 's URIs

+	 */

+	public Collection<URI> getRemovedResources() {

+		return removedResources;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/InitializeContent.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/InitializeContent.java
new file mode 100644
index 0000000..c81af35
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/InitializeContent.java
@@ -0,0 +1,43 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.ide.handlers;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.mylyn.docs.intent.client.ui.ide.launcher.IDEApplicationManager;

+

+/**

+ * Handler that print a widget allowing the user to select the Intent element to open.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ * @author <a href="mailto:william.piers@obeo.fr">William Piers</a>

+ */

+public class InitializeContent extends AbstractHandler {

+

+	/**

+	 * constructor.

+	 */

+	public InitializeContent() {

+		super();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)

+	 */

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		IDEApplicationManager.initializeContent();

+		System.out.println("Content correctly initialized.");

+		return null;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/LaunchAllClients.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/LaunchAllClients.java
new file mode 100644
index 0000000..337b541
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/LaunchAllClients.java
@@ -0,0 +1,41 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.ide.handlers;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.mylyn.docs.intent.client.ui.ide.launcher.IDEApplicationManager;

+

+/**

+ * Handler that print a widget allowing the user to select the Intent element to open.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class LaunchAllClients extends AbstractHandler {

+

+	/**

+	 * constructor.

+	 */

+	public LaunchAllClients() {

+		super();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)

+	 */

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		IDEApplicationManager.createAndLaunchClients();

+		return null;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/ShowIndexHandler.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/ShowIndexHandler.java
new file mode 100644
index 0000000..b5124ce
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/handlers/ShowIndexHandler.java
@@ -0,0 +1,41 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.ide.handlers;

+

+import org.eclipse.core.commands.AbstractHandler;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.commands.ExecutionException;

+import org.eclipse.mylyn.docs.intent.client.ui.ide.launcher.IDEApplicationManager;

+

+/**

+ * Handler that print a widget allowing the user to select the Intent element to open.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public class ShowIndexHandler extends AbstractHandler {

+

+	/**

+	 * constructor.

+	 */

+	public ShowIndexHandler() {

+		super();

+	}

+

+	/**

+	 * {@inheritDoc}

+	 * 

+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)

+	 */

+	public Object execute(ExecutionEvent event) throws ExecutionException {

+		IDEApplicationManager.openElement();

+		return null;

+	}

+}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/launcher/IDEApplicationManager.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/launcher/IDEApplicationManager.java
new file mode 100644
index 0000000..96ecd22
--- /dev/null
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/launcher/IDEApplicationManager.java
@@ -0,0 +1,292 @@
+/*******************************************************************************

+ * Copyright (c) 2010, 2011 Obeo.

+ * 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:

+ *     Obeo - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.mylyn.docs.intent.client.ui.ide.launcher;

+

+import java.io.File;

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.IProject;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.emf.cdo.eresource.EresourcePackage;

+import org.eclipse.emf.ecore.EObject;

+import org.eclipse.emf.ecore.resource.Resource;

+import org.eclipse.emf.ecore.util.EcoreUtil;

+import org.eclipse.mylyn.docs.intent.client.compiler.launcher.CompilerCreator;

+import org.eclipse.mylyn.docs.intent.client.compiler.repositoryconnection.CompilerRepositoryClient;

+import org.eclipse.mylyn.docs.intent.client.indexer.IndexerRepositoryClient;

+import org.eclipse.mylyn.docs.intent.client.indexer.launcher.IndexerCreator;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.SynchronizerRepositoryClient;

+import org.eclipse.mylyn.docs.intent.client.synchronizer.launcher.SynchronizerCreator;

+import org.eclipse.mylyn.docs.intent.client.ui.ide.builder.IntentNature;

+import org.eclipse.mylyn.docs.intent.client.ui.ide.generatedelementlistener.IDEGeneratedElementListener;

+import org.eclipse.mylyn.docs.intent.client.ui.ide.structurer.IntentWorkspaceRepositoryStructurer;

+import org.eclipse.mylyn.docs.intent.client.ui.logger.IntentUiLogger;

+import org.eclipse.mylyn.docs.intent.collab.common.location.IntentLocations;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.ReadOnlyException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.RepositoryAdapter;

+import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.SaveException;

+import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotificationFactoryHolder;

+import org.eclipse.mylyn.docs.intent.collab.ide.notification.WorkspaceRepositoryChangeNotificationFactory;

+import org.eclipse.mylyn.docs.intent.collab.ide.repository.WorkspaceConfig;

+import org.eclipse.mylyn.docs.intent.collab.ide.utils.MonitoringUtil;

+import org.eclipse.mylyn.docs.intent.collab.ide.utils.WorkspaceRepositoryCreator;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

+import org.eclipse.mylyn.docs.intent.collab.repository.RepositoryConnectionException;

+import org.eclipse.mylyn.docs.intent.collab.utils.RepositoryCreatorHolder;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerFactory;

+import org.eclipse.mylyn.docs.intent.core.compiler.CompilerPackage;

+import org.eclipse.mylyn.docs.intent.core.descriptionunit.DescriptionUnitPackage;

+import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage;

+import org.eclipse.mylyn.docs.intent.core.genericunit.GenericUnitPackage;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerFactory;

+import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndexerPackage;

+import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage;

+import org.eclipse.mylyn.docs.intent.parser.IntentParser;

+import org.eclipse.mylyn.docs.intent.parser.modelingunit.ParseException;

+import org.eclipse.mylyn.docs.intent.parser.modelingunit.parser.utils.FileToStringConverter;

+

+/**

+ * In charge of creating the repository and launching clients in the context of a Workspace Intent Repository.

+ * 

+ * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>

+ */

+public final class IDEApplicationManager {

+

+	private static Map<IProject, Repository> repositories = new HashMap<IProject, Repository>();

+

+	private static CompilerRepositoryClient compilerClient;

+

+	private static SynchronizerRepositoryClient synchronizerClient;

+

+	private static IndexerRepositoryClient indexerClient;