Adjust the Gerrit commands

Change-Id: Id3c53ae0df490c1d97c506b62203718068e3161e
Signed-off-by: jbouthillie <lmcbout@gmail.com>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml
index b3b18ae..d144cdd 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/contexts.xml
@@ -10,4 +10,7 @@
 			</enablement>
 		</topic>
 	</context>
+ <context id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching">
+    <command label="Help_Command"/>
+ </context>
 </contexts>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
index a43c23e..f949824 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/plugin.xml
@@ -97,6 +97,7 @@
                 name="addition2"
                 visible="true">
             </separator>
+ <!--
           <command
                 commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.projectList"
                 id="r4eGerritUI.dropdown.toolbar.ProjectList"
@@ -119,6 +120,7 @@
                 name="addition4"
                 visible="true">
             </separator>
+ -->
           <command
                 commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationIndex"
                 id="r4eGerritUI.dropdown.toolbar.Documentation"
@@ -281,6 +283,14 @@
                tooltip="Find the access controls of the documentation">
          </command>
 
+         <command
+               commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationRestAPI"
+               id="r4eGerritUI.dropdown.toolbar.documentationRestAPI"
+               label="REST API"
+               style="push"
+               tooltip="Find the REST API of the documentation">
+         </command>
+
 
          <separator
                name="additions"
@@ -291,13 +301,14 @@
       
   </extension>
    
+ <!--
    <extension
          point="org.eclipse.help.contexts">
       <contexts
             file="contexts.xml">
       </contexts>
    </extension>
-   
+ -->  
    <extension
          point="org.eclipse.ui.commands">
 
@@ -369,8 +380,8 @@
             	name="DocumentationIndex">
       </command>
        <command
-            	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching"
-            	name="DocumentationSearching">
+             	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching"
+             	name="DocumentationSearching">
       </command>
        <command
             	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationUploading"
@@ -381,17 +392,28 @@
             	name="DocumentationAccessControls">
       </command>
       
+       <command
+            	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationRestAPI"
+            	name="DocumentationRestAPI">
+      </command>
+      
           <!-- The following are the commands under the "Review TableList" sub-menu
          -->
        <command
             	id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.adjustMyStarred"
             	name="Toggle ID Selection">
       </command>
- 
+  
    </extension>
 
    <extension
          point="org.eclipse.ui.bindings">
+      <key
+            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching"
+            contextId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.context"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="F1">
+      </key>
    </extension>
    
    <extension
@@ -462,8 +484,8 @@
 	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationIndex">
 	      </handler>
 	      <handler
-	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.SearchingHandler"
-	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching">
+             	class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.SearchingHandler"
+             	commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationSearching">
 	      </handler>
 	      <handler
 	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.UploadingHandler"
@@ -473,6 +495,10 @@
 	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.AccessControlHandler"
 	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationAccessControls">
 	      </handler>
+	      <handler
+	            class="org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation.RestAPIHandler"
+	            commandId="org.eclipse.mylyn.reviews.r4e-gerrit.ui.documentationRestAPI">
+	      </handler>
 	     <!-- The following are the handlers under the "Table review list" sub-menu
          -->
 	      <handler
@@ -484,5 +510,14 @@
    <extension
          point="org.eclipse.mylyn.tasks.ui.editors">
    </extension>
+   <extension
+         point="org.eclipse.ui.contexts">
+      <context
+            description="Dashboard R4E-gerrit View"
+            id="org.eclipse.mylyn.reviews.r4e-gerrit.ui.context"
+            name="Dashboard View"
+            parentId="org.eclipse.ui.contexts.window">
+      </context>
+   </extension>
 
 </plugin>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
index 913f07b..0034ef1 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/AddGerritSiteHandler.java
@@ -82,7 +82,7 @@
 
 	    R4EGerritPlugin.Ftracer.traceInfo("Create the Add button to search the Gerrit location " ); //$NON-NLS-1$
 		String menuItemText = "";
-		fServerUtil = new R4EGerritServerUtility();
+		fServerUtil = R4EGerritServerUtility.getInstance();
 		Object obj = aEvent.getTrigger();
 		Map<String, String> param = aEvent.getParameters();
 		R4EGerritTableView reviewTableView = R4EGerritTableView
@@ -186,7 +186,7 @@
 					TaskRepository taskRepositoryTmp = fServerUtil.getTaskRepo (taskRepository.getUrl());
 					if (taskRepositoryTmp == null) {
 						//Need to re-map our internal Gerrit Repo
-						fServerUtil.mapConfiguredGerritServer();
+						fServerUtil.getGerritMapping();
 					}
 					/*****************************************************/
 					/*                                                   */
@@ -227,7 +227,7 @@
 	private TaskRepository getTaskRepository (String aUrl) {
 		TaskRepository taskRepo = null;
 		//Search for the current Gerrit connector
-		taskRepo =  R4EGerritServerUtility.getDefault().getTaskRepo(aUrl);
+		taskRepo =  R4EGerritServerUtility.getInstance().getTaskRepo(aUrl);
 		
 		if (taskRepo == null) {
 			if (aUrl != null) {
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java
index a92a114..a37fdd7 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/SelectReviewSiteHandler.java
@@ -99,7 +99,7 @@
 
 
 				//Map the Gerrit server
-				fServerUtil = new R4EGerritServerUtility();
+				fServerUtil = R4EGerritServerUtility.getInstance();
 				
 				//Debug purpose, see which project have a gerrit server
 				fMapRepoServer = fServerUtil.getGerritMapping();
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java
index e50e915..c1cd1aa 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/AccessControlHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -30,21 +29,17 @@
 
 public class AccessControlHandler extends AbstractHandler {
 
+	private final String ACCESS_CONTROL_DOCUMENTATION = "Documentation/access-control.html";
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent aEvent) throws ExecutionException {
-		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation AccessControlHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  AccessControlHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (ACCESS_CONTROL_DOCUMENTATION);
+
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java
index 809b681..65b2acc 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/IndexHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -29,22 +28,18 @@
  */
 
 public class IndexHandler extends AbstractHandler {
-
+	
+	private final String INDEX_DOCUMENTATION = "Documentation/index.html";
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent aEvent) throws ExecutionException {
-		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation IndexHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  IndexHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (INDEX_DOCUMENTATION);
+
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/RestAPIHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/RestAPIHandler.java
new file mode 100644
index 0000000..04bf965
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/RestAPIHandler.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Ericsson
+ * 
+ * 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
+ * 
+ * Description:
+ * 	This class implements the implementation of the R4E-Gerrit UI REST API 	reviews handler.
+ * 
+ * Contributors:
+ *   Jacques Bouthillier - Initial Implementation of the plug-in handler
+ ******************************************************************************/
+
+package org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.commands.documentation;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4egerrit.ui.views.R4EGerritTableView;
+import org.osgi.framework.Version;
+
+/**
+ * @author Jacques Bouthillier
+ * @version $Revision: 1.0 $
+ *
+ */
+
+public class RestAPIHandler extends AbstractHandler {
+
+	private final String REST_API_DOCUMENTATION = "Documentation/rest-api.html";
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		R4EGerritUi.Ftracer.traceInfo("Search the documentation RestAPIHandler  " ); //$NON-NLS-1$
+		Version version = R4EGerritTableView.getActiveView().getlastGerritServerVersion();
+		//Testing the Gerrit server before getting the documentation
+		if (version != null) {
+			if (version.getMajor() >= 2) {
+				if (version.getMinor() < 5) {
+					String msg = "Selected Gerrit server: " + version.toString();
+					String reason = "Gerrit server is too old, need at least Gerrit version 2.5 \nto get Gerrit Code Review - REST API documentation.";
+					R4EGerritUi.Ftracer.traceInfo(msg );
+					UIUtils.showErrorDialog(msg, reason);
+					return null;
+				}
+			}
+		}
+		
+		R4EGerritServerUtility.getInstance().openWebBrowser (REST_API_DOCUMENTATION);
+		
+		return null;
+	}
+
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java
index 6316ea0..53fa4d6 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/SearchingHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -29,7 +28,11 @@
  */
 
 public class SearchingHandler extends AbstractHandler {
+	
 
+	private final String SEARCHING_DOCUMENTATION = "Documentation/user-search.html";
+
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
@@ -38,13 +41,8 @@
 		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation SearchingHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  SearchingHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (SEARCHING_DOCUMENTATION);
+
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java
index 43323c9..f76efac 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/commands/documentation/UploadingHandler.java
@@ -18,9 +18,8 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.common.NotDefinedException;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
-import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
 
 /**
  * @author Jacques Bouthillier
@@ -30,21 +29,17 @@
 
 public class UploadingHandler extends AbstractHandler {
 
+	private final String UPLOADING_DOCUMENTATION = "Documentation/user-upload.html";
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent aEvent) throws ExecutionException {
-		// TODO Auto-generated method stub
 		R4EGerritUi.Ftracer.traceInfo("Search the documentation UploadingHandler  " ); //$NON-NLS-1$
 
-		R4EGerritUi.Ftracer.traceInfo("Execute:  UploadingHandler() "  ); //$NON-NLS-1$
-		try {
-			UIUtils.notInplementedDialog(aEvent.getCommand().getName());
-		} catch (NotDefinedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
+		R4EGerritServerUtility.getInstance().openWebBrowser (UPLOADING_DOCUMENTATION);
+		
 		return null;
 	}
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java
index 08a8bfb..c24681b 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/menus/DynamicMenuAddition.java
@@ -143,7 +143,7 @@
 		fServiceLocator = aServiceLocator;
 		
 		//Read the Gerrit potential servers
-		fServer = new R4EGerritServerUtility();
+		fServer = R4EGerritServerUtility.getInstance();
 		R4EGerritPlugin.Ftracer.traceInfo("\t\t DynamicMenuAddition .initialize()()" );
 		
 	}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
index 0106c52..1652e2e 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/internal/utils/R4EGerritServerUtility.java
@@ -21,8 +21,9 @@
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -39,8 +40,13 @@
 import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
 import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
 import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
+import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
 import org.eclipse.mylyn.tasks.core.RepositoryTemplate;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
 
 
 /**
@@ -75,20 +81,31 @@
 	 */
 	private static final String LAST_GERRIT_FILE = "lastGerrit.txt";
 
+	/**
+	 * Field ECLIPSE_GERRIT_DEFAULT. (value is ""https://git.eclipse.org/r/"")
+	 */
+	private final String ECLIPSE_GERRIT_DEFAULT = "https://git.eclipse.org/r/";
+	
+	/**
+	 * Field SLASH. (value is ""/"")
+	 */
+	private final String SLASH = "/";
+
+
+
 	// ------------------------------------------------------------------------
 	// Variables
 	// ------------------------------------------------------------------------
 
-	private static R4EGerritServerUtility instance = null;
+	private static R4EGerritServerUtility fInstance = null;
 
-	private static Map<TaskRepository, String> fResultTask = new HashMap<TaskRepository,String>();
+	private Map<TaskRepository, String> fResultTask = new HashMap<TaskRepository,String>();
 	
 	// ------------------------------------------------------------------------
 	// Constructors
 	// ------------------------------------------------------------------------
-	public R4EGerritServerUtility() {
-		instance = this;
-		mapConfiguredGerritServer();
+	protected R4EGerritServerUtility() {
+		fInstance = this;
 		
 		//LATER: Map the workspace gerrit to the menu option
 		//addWorkspaceGerritRepo();
@@ -98,36 +115,12 @@
 		//End Test
 	}
 
+
 	// ------------------------------------------------------------------------
 	// Methods Private
 	// ------------------------------------------------------------------------
 	
 	/**
-	 * Map the configured Gerrit server found in the TaskList
-	 * @return Map<TaskRepository, String>
-	 */
-	public Map<TaskRepository, String> mapConfiguredGerritServer () {
-		//Reset the list of Gerrit server
-		fResultTask.clear();
-		
-		TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager();
-		
-		//Only get the TaskRepository related to Gerrit review connnector
-		R4EGerritPlugin.Ftracer.traceInfo("--------Review repo ---------------");
-		Set<TaskRepository> reviewRepo = repositoryManager.getRepositories(GerritConnector.CONNECTOR_KIND);
-		for (TaskRepository taskRepo: reviewRepo) {
-		    R4EGerritPlugin.Ftracer.traceInfo("Add Gerrit Review repo: " + taskRepo.getRepositoryLabel() + "\t url: " + taskRepo.getRepositoryUrl());
-			fResultTask.put(taskRepo, taskRepo.getRepositoryUrl());
-			if (null != taskRepo.getRepositoryUrl()  ) {
-				adjustTemplatemanager(taskRepo);			
-			}
-		}
-		//Print a the end the info for all Gerrit 
-		printRepositoryTemplate();
-		return fResultTask;
-	}
-	
-	/**
 	 * Build a list of Gerrit server to display in the combo box in the dialogue window
 	 * @param aTaskRepo
 	 */
@@ -276,21 +269,84 @@
 		return file;
 	}
 	
+	/**
+	 * Build a URL for Gerrit documentation
+	 * @param aRequest specific documentation 
+	 * @return URL complete URL fo the selected site based on the Gerrit server and version
+	 * @throws MalformedURLException
+	 */
+	private URL buildDocumentationURL (String aRequest) throws MalformedURLException {
+		StringBuilder sb = new StringBuilder();
+
+		String lastSaved = getInstance ().getLastSavedGerritServer();
+		if (lastSaved == null) {
+			//Use Default, so ECLIPSE_GERRIT_DEFAULT
+			lastSaved = ECLIPSE_GERRIT_DEFAULT;
+		}
+		if (!lastSaved.endsWith(SLASH)) {
+			lastSaved = lastSaved.concat(SLASH);
+		}
+		sb.append(lastSaved);
+		sb.append(aRequest);
+		return new URL (sb.toString());
+	}
+	
+	/**
+	 * Search for a similar page in the eclipse editor
+	 * @param aUrl 
+	 * @return String
+	 */
+	private String getEditorId (URL aUrl) {
+		//Try to get the editor id
+		IEditorDescriptor desc = PlatformUI.getWorkbench().
+		        getEditorRegistry().getDefaultEditor(aUrl.getFile());
+		String id = null;
+		if (desc !=null) {
+			id = desc.getId();
+		}
+
+		return id;
+	}
+	
 	// ------------------------------------------------------------------------
 	// Methods Public
 	// ------------------------------------------------------------------------
-	public static R4EGerritServerUtility getDefault () {
-		if (instance == null) {
+	public static R4EGerritServerUtility getInstance () {
+		if (fInstance == null) {
 			new R4EGerritServerUtility();
 		}
-		return instance;
+		return fInstance;
 	}
 	
 	/**
 	 * Return the mapping of the available Gerrit server used in the user workspace
 	 * @return Map<Repository, String>
 	 */
-	public static Map<TaskRepository, String> getGerritMapping () {
+	public Map<TaskRepository, String> getGerritMapping () {
+		if (fResultTask == null ) {
+			fResultTask = new HashMap<TaskRepository,String>();
+		}
+			
+		
+		//Reset the list of Gerrit server
+		fResultTask.clear();
+		
+		TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager();
+		if (repositoryManager != null) {
+			//Only get the TaskRepository related to Gerrit review connnector
+			R4EGerritPlugin.Ftracer.traceInfo("--------Review repo ---------------");
+			Set<TaskRepository> reviewRepo = repositoryManager.getRepositories(GerritConnector.CONNECTOR_KIND);
+			for (TaskRepository taskRepo: reviewRepo) {
+			    R4EGerritPlugin.Ftracer.traceInfo("Add Gerrit Review repo: " + taskRepo.getRepositoryLabel() + "\t url: " + taskRepo.getRepositoryUrl());
+				fResultTask.put(taskRepo, taskRepo.getRepositoryUrl());
+				if (null != taskRepo.getRepositoryUrl()  ) {
+					adjustTemplatemanager(taskRepo);			
+				}
+			}
+			//Print a the end the info for all Gerrit 
+			printRepositoryTemplate();
+			
+		}
 		return fResultTask;
 	}
 	
@@ -345,6 +401,7 @@
 	 */
 	public String getMenuSelectionURL (String aSt) {
 		String urlStr = null;
+		fResultTask = getGerritMapping();
 		if (!fResultTask.isEmpty()) {
 			Set<TaskRepository> mapSet = fResultTask.keySet();
 			R4EGerritPlugin.Ftracer.traceInfo("-------------------");
@@ -369,7 +426,7 @@
 	 * 
 	 */
 	public TaskRepository getTaskRepo (String aStURL) {
-		
+		fResultTask = getGerritMapping();
 		if (aStURL != null && !fResultTask.isEmpty()) {
 			Set<TaskRepository> mapSet = fResultTask.keySet();
 			R4EGerritPlugin.Ftracer.traceInfo("-------------------");
@@ -384,8 +441,39 @@
 		
 		return null;
 	}
+	
 
 	/**
+	 * Open the web browser for the specific documentation
+	 * @param String aDocumentation requested documentation
+	 */
+	public void openWebBrowser (String aDocumentation) {
+		if (fInstance == null) {
+			fInstance = getInstance();
+		}
+
+		IWorkbenchBrowserSupport workBenchSupport = PlatformUI.getWorkbench().getBrowserSupport();
+		URL url = null;
+		try {
+			url = buildDocumentationURL (aDocumentation);
+			try {
+			
+				//Using NULL as a browser id will create a new editor each time, 
+				//so we need to see if there is already an editor for this help
+				String id = getEditorId (url);
+				workBenchSupport.createBrowser(id).openURL(url);
+			} catch (PartInitException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		} catch (MalformedURLException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		R4EGerritUi.Ftracer.traceInfo("openWebBrowser for " + url );
+	}
+	
+	/**
 	 * Read the Gerrit server to populate the list of reviews
 	 */
 	public void getReviewListFromServer () {
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
index 676756d..e09493c 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/src/org/eclipse/mylyn/reviews/r4egerrit/ui/views/R4EGerritTableView.java
@@ -92,10 +92,12 @@
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.menus.CommandContributionItem;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
 import org.eclipse.ui.part.ViewPart;
 import org.eclipse.ui.services.IServiceLocator;
+import org.osgi.framework.Version;
 
 /**
  * This class initiate a new workbench view. The view
@@ -135,7 +137,12 @@
 
 	private final int SEARCH_WIDTH = 300;
 	private final int REPO_WIDTH = 200;
-	private final int VERSION_WIDTH = 70;
+	private final int VERSION_WIDTH = 100;
+	
+	private final String SEARCH_TOOLTIP = "Ex. status:open (or is:open) \n status:merged \n "
+			+ "is:draft \n status:open project:Foo \n "
+			+ "See explanation by selecting in the toolbar \n "
+			+ "Documentation > Searching";
 	
 	// ------------------------------------------------------------------------
 	// Member variables
@@ -166,7 +173,7 @@
 	private static TableViewer fViewer;
 	
 	private ReviewTableData fReviewTable = new ReviewTableData();
-	private R4EGerritServerUtility fServerUtil = new R4EGerritServerUtility();
+	private R4EGerritServerUtility fServerUtil = R4EGerritServerUtility.getInstance();
 
 	private Map<TaskRepository, String> fMapRepoServer = null;
 
@@ -349,6 +356,7 @@
 		//Create a SEARCH text data entry
 		fSearchRequestText = new Text (rightSsearchForm, SWT.BORDER);
 		fSearchRequestText.setLayoutData(new GridData(SEARCH_WIDTH, SWT.DEFAULT));
+		fSearchRequestText.setToolTipText(SEARCH_TOOLTIP);
 	
 		//Create a SEARCH button 
 		fSearchRequestBtn = new Button (rightSsearchForm, SWT.NONE);
@@ -551,7 +559,7 @@
 		
 		if (fTaskRepository == null) {
 			//If we did not find the task Repository
-			fMapRepoServer = R4EGerritServerUtility.getGerritMapping();
+			fMapRepoServer = R4EGerritServerUtility.getInstance().getGerritMapping();
 			//Verify How many gerrit server are defined
 			if (fMapRepoServer.size() == 1) {
 				Set<TaskRepository> mapSet = fMapRepoServer.keySet();
@@ -578,6 +586,50 @@
 	}
 	
 	/**
+	 * Find the last Gerrit server being used , otherwise consider the Eclipse.org gerrit server version as a default
+	 * @return Version
+	 */
+	public Version getlastGerritServerVersion () {
+		Version version = null;
+		String lastSaved = fServerUtil.getLastSavedGerritServer();
+		if (lastSaved != null) {
+			//Already saved a Gerrit server, so use it
+			fTaskRepository  = fServerUtil.getTaskRepo(lastSaved);
+		}
+		
+		if (fTaskRepository == null) {
+			//If we did not find the task Repository
+			fMapRepoServer = R4EGerritServerUtility.getInstance().getGerritMapping();
+			//Verify How many gerrit server are defined
+			if (fMapRepoServer.size() == 1) {
+				Set<TaskRepository> mapSet = fMapRepoServer.keySet();
+				for (TaskRepository key: mapSet) {
+				    fTaskRepository = key;
+					//Save it for the next query time
+					fServerUtil.saveLastGerritServer(key.getRepositoryUrl());
+					break;
+				}
+				
+			}
+		}
+		
+		//We should have a TaskRepository here, otherwise, the user need to define one
+		if (fTaskRepository != null) {
+			if (fConnector != null) {
+				GerritClient gerritClient = fConnector.getClient(fTaskRepository);
+				try {
+					version = gerritClient.getVersion(new NullProgressMonitor());
+					R4EGerritUi.Ftracer.traceInfo("Selected version: " + version.toString());
+				} catch (GerritException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+		}
+		return version;
+	}
+	
+	/**
 	 * @param aTaskRepo
 	 * @param aQueryType
 	 * @return
@@ -615,7 +667,7 @@
 	                        setRepositoryLabel(aTaskRepo.getRepositoryLabel());
 	                        GerritClient gerritClient = fConnector.getClient(aTaskRepo);
 	                        try {
-								R4EGerritUi.Ftracer.traceInfo("Jb GerritClient: " + gerritClient.getVersion(new NullProgressMonitor()) );
+								R4EGerritUi.Ftracer.traceInfo("GerritClient: " + gerritClient.getVersion(new NullProgressMonitor()) );
 								setRepositoryVersionLabel (gerritClient.getVersion(new NullProgressMonitor()).toString() );
 							} catch (GerritException e1) {
 								e1.printStackTrace();