improved clients api: common register/unregister strategy
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
index 04b59c9..cd1ea8b 100644
--- 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
@@ -88,8 +88,7 @@
 		handler.addNotificator(notificator);

 

 		// Step 3: create the compiler

-		CompilerRepositoryClient compilerClient = new CompilerRepositoryClient();

-		compilerClient.setRepository(repository);

+		CompilerRepositoryClient compilerClient = new CompilerRepositoryClient(repository);

 		compilerClient.addRepositoryObjectHandler(handler);

 

 		return compilerClient;

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
index 0903a4c..2dbd00b 100644
--- 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
@@ -27,26 +27,14 @@
 public class CompilerRepositoryClient extends AbstractRepositoryClient {
 
 	/**
-	 * The repository to use for access to package registry and several informations.
-	 */
-	private Repository repository;
-
-	/**
 	 * Constructor.
-	 */
-	public CompilerRepositoryClient() {
-		IntentLogger.getInstance().log(LogType.LIFECYCLE, "[Compiler] Ready");
-	}
-
-	/**
-	 * Sets the repository to use for saving and closing getConnexion.
 	 * 
 	 * @param repository
-	 *            the repository to use for saving and closing getConnexion
+	 *            the repository
 	 */
-	public void setRepository(Repository repository) {
-		this.repository = repository;
-		this.repository.register(this);
+	public CompilerRepositoryClient(Repository repository) {
+		super(repository);
+		IntentLogger.getInstance().log(LogType.LIFECYCLE, "[Compiler] Ready");
 	}
 
 	/**
@@ -59,14 +47,4 @@
 		return new CompilationJob(this.repository, this.repositoryObjectHandler);
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.impl.AbstractRepositoryClient#dispose()
-	 */
-	@Override
-	public void dispose() {
-		this.repository.unregister(this);
-		super.dispose();
-	}
 }
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
index 7b35407..a7b5982 100644
--- 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
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.mylyn.docs.intent.client.indexer;
 
-import com.google.common.collect.Lists;
-
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -28,9 +26,12 @@
 import org.eclipse.mylyn.docs.intent.collab.handlers.adapters.SaveException;
 import org.eclipse.mylyn.docs.intent.collab.handlers.impl.AbstractRepositoryClient;
 import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification;
+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
 import org.eclipse.mylyn.docs.intent.core.document.IntentDocument;
 import org.eclipse.mylyn.docs.intent.core.indexer.IntentIndex;
 
+import com.google.common.collect.Lists;
+
 /**
  * When notified about modifications on the listened elements, update the index.
  * 
@@ -45,9 +46,13 @@
 	private TocMaker indexComputor;
 
 	/**
-	 * Indexer constructor.
+	 * Constructor.
+	 * 
+	 * @param repository
+	 *            the repository
 	 */
-	public IndexerRepositoryClient() {
+	public IndexerRepositoryClient(Repository repository) {
+		super(repository);
 		indexComputor = new TocMaker();
 		IntentLogger.getInstance().log(LogType.LIFECYCLE, "[Indexer] Ready");
 	}
@@ -104,4 +109,5 @@
 		job.setSystem(true);
 		return job;
 	}
+
 }
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
index 18469b8..3d6a9e1 100644
--- 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
@@ -68,7 +68,7 @@
 

 		// Step 4 : launching the indexer

 

-		IndexerRepositoryClient indexer = new IndexerRepositoryClient();

+		IndexerRepositoryClient indexer = new IndexerRepositoryClient(repository);

 		indexer.addRepositoryObjectHandler(handler);

 

 		return indexer;

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverClient.java b/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverClient.java
index 12638a9..d3b3017 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverClient.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverClient.java
@@ -13,6 +13,7 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.mylyn.docs.intent.collab.handlers.impl.AbstractRepositoryClient;
 import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification;
+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;
 
 /**
  * Link resolver client. Launch a resolve operation each time a modification on links is detected.
@@ -23,6 +24,16 @@
 public class LinkResolverClient extends AbstractRepositoryClient {
 
 	/**
+	 * Constructor.
+	 * 
+	 * @param repository
+	 *            the repository
+	 */
+	public LinkResolverClient(Repository repository) {
+		super(repository);
+	}
+
+	/**
 	 * {@inheritDoc}
 	 * 
 	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.impl.AbstractRepositoryClient#createNotificationJob(org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification)
diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverCreator.java b/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverCreator.java
index 7ca11e3..2ce20a5 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverCreator.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.linkresolver/src/org/eclipse/mylyn/docs/intent/client/linkresolver/repository/LinkResolverCreator.java
@@ -73,7 +73,7 @@
 		handler.addNotificator(typeNotificator);
 
 		// Step 3: create the link resolver
-		LinkResolverClient linkResolver = new LinkResolverClient();
+		LinkResolverClient linkResolver = new LinkResolverClient(repository);
 		linkResolver.addRepositoryObjectHandler(handler);
 
 		return linkResolver;
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
index 4e532f9..4aa62c3 100644
--- 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
@@ -10,9 +10,6 @@
  *******************************************************************************/

 package org.eclipse.mylyn.docs.intent.client.synchronizer;

 

-import com.google.common.collect.Iterables;

-import com.google.common.collect.Sets;

-

 import java.util.Collection;

 import java.util.Iterator;

 

@@ -23,11 +20,15 @@
 import org.eclipse.mylyn.docs.intent.collab.common.logger.IntentLogger;

 import org.eclipse.mylyn.docs.intent.collab.handlers.impl.AbstractRepositoryClient;

 import org.eclipse.mylyn.docs.intent.collab.handlers.notification.RepositoryChangeNotification;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

 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.SynchronizerCompilationStatus;

 import org.eclipse.mylyn.docs.intent.core.compiler.TraceabilityIndex;

 

+import com.google.common.collect.Iterables;

+import com.google.common.collect.Sets;

+

 /**

  * 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.

@@ -59,9 +60,12 @@
 	 *            the listened {@link TraceabilityIndex}

 	 * @param statusManager

 	 *            the {@link CompilationStatusManager} to use for adding statuses

+	 * @param repository

+	 *            the repository to listen

 	 */

 	public SynchronizerRepositoryClient(TraceabilityIndex traceabilityIndex,

-			CompilationStatusManager statusManager) {

+			CompilationStatusManager statusManager, Repository repository) {

+		super(repository);

 		IntentLogger.getInstance().log(LogType.LIFECYCLE, "[Synchronizer] Ready");

 		this.synchronizer = new IntentSynchronizer(this);

 		this.traceabilityIndex = traceabilityIndex;

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
index dc12851..17d831c 100644
--- 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
@@ -87,7 +87,7 @@
 

 		// Step 3 : create the synchronizer

 		SynchronizerRepositoryClient synchronizerClient = new SynchronizerRepositoryClient(traceabilityIndex,

-				statusManager);

+				statusManager, repository);

 		synchronizerClient.addRepositoryObjectHandler(handler);

 		synchronizerClient.setGeneratedElementListener(generatedElementListener);

 

diff --git a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java
index 9069a15..af4b5e1 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.client.ui.ide/src/org/eclipse/mylyn/docs/intent/client/ui/ide/navigator/ProjectExplorerRefresher.java
@@ -57,8 +57,11 @@
 	 * 

 	 * @param project

 	 *            the project to refresh

+	 * @param repository

+	 *            the repository to listen

 	 */

-	public ProjectExplorerRefresher(IProject project) {

+	public ProjectExplorerRefresher(IProject project, Repository repository) {

+		super(repository);

 		this.project = project;

 		updateProblemView();

 	}

@@ -99,7 +102,7 @@
 		handler.addNotificator(listenedElementsNotificator);

 

 		// Step 4 : create the ProjectExplorer refresher

-		ProjectExplorerRefresher refresher = new ProjectExplorerRefresher(project);

+		ProjectExplorerRefresher refresher = new ProjectExplorerRefresher(project, repository);

 		refresher.addRepositoryObjectHandler(handler);

 		return refresher;

 	}

diff --git a/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/impl/AbstractRepositoryClient.java b/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/impl/AbstractRepositoryClient.java
index b656068..650ba5f 100644
--- a/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/impl/AbstractRepositoryClient.java
+++ b/plugins/org.eclipse.mylyn.docs.intent.collab/src/org/eclipse/mylyn/docs/intent/collab/handlers/impl/AbstractRepositoryClient.java
@@ -14,6 +14,7 @@
 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.notification.RepositoryChangeNotification;

+import org.eclipse.mylyn.docs.intent.collab.repository.Repository;

 

 /**

  * An abstract Repository Client which manages notifications.

@@ -33,11 +34,27 @@
 	protected RepositoryObjectHandler repositoryObjectHandler;

 

 	/**

+	 * The repository to use for access to package registry and several informations.

+	 */

+	protected Repository repository;

+

+	/**

 	 * The {@link Job} that handles notifications.

 	 */

 	private Job notificationJob;

 

 	/**

+	 * Constructor.

+	 * 

+	 * @param repository

+	 *            the repository

+	 */

+	public AbstractRepositoryClient(Repository repository) {

+		this.repository = repository;

+		this.repository.register(this);

+	}

+

+	/**

 	 * {@inheritDoc}

 	 * 

 	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#addRepositoryObjectHandler(org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryObjectHandler)

@@ -99,6 +116,7 @@
 	 * @see org.eclipse.mylyn.docs.intent.collab.handlers.RepositoryClient#dispose()

 	 */

 	public void dispose() {

+		this.repository.unregister(this);

 		if (notificationJob != null) {

 			notificationJob.cancel();

 			notificationJob = null;