- Synchronize the task editor when opening a review
- Add some files for JUINT testing

Change-Id: I948473f74b03f28c0d912123f533c87273e510e1
Signed-off-by: jbouthillie <lmcbout@gmail.com>
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui.test/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/test/GerritCorePluginStub.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui.test/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/test/GerritCorePluginStub.java
new file mode 100644
index 0000000..0780e19
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui.test/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/test/GerritCorePluginStub.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Tasktop Technologies and others.
+ * 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:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.reviews.r4e_gerrit.ui.test;
+
+import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
+import org.eclipse.mylyn.internal.gerrit.core.GerritCorePlugin;
+
+public class GerritCorePluginStub extends GerritCorePlugin {
+
+	private static GerritCorePlugin plugin;
+
+	public static GerritCorePlugin getDefault() {
+		return plugin;
+	}
+
+	@Override
+	public GerritConnector getConnector() {
+		return new GerritConnector();
+	}
+
+}
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui.test/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/test/R4EGerritTableViewTest.java b/org.eclipse.mylyn.reviews.r4e-gerrit.ui.test/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/test/R4EGerritTableViewTest.java
index eb5bd6d..ea8db22 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui.test/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/test/R4EGerritTableViewTest.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui.test/src/org/eclipse/mylyn/reviews/r4e_gerrit/ui/test/R4EGerritTableViewTest.java
@@ -4,6 +4,7 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import org.eclipse.mylyn.reviews.r4e_gerrit.trace.Tracer;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.R4EGerritUi;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model.ReviewTableData;
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.R4EGerritServerUtility;
@@ -13,6 +14,7 @@
 import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
 import org.eclipse.mylyn.internal.gerrit.core.GerritCorePlugin;
 import org.eclipse.mylyn.internal.gerrit.core.GerritQuery;
+
 import org.junit.After;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -24,24 +26,22 @@
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
 import org.powermock.modules.junit4.PowerMockRunner;
 
 
-//@RunWith(MockitoJUnitRunner.class)
 @RunWith(PowerMockRunner.class)
-//
-@PrepareForTest(R4EGerritServerUtility.class)
+@PrepareForTest({R4EGerritServerUtility.class, GerritCorePlugin.class, R4EGerritUi.class})
 
 
 public class R4EGerritTableViewTest {
-
 	
 	private R4EGerritTableView r4eGerritTableView;
 	@Mock
     private R4EGerritServerUtility fServerUtil; 
-
+	R4EGerritUi R4EGUi;
+	public Tracer Ftracer;
 
 	@Test
 	public void setUp() throws Exception {
@@ -52,38 +52,61 @@
 	public void tearDown() throws Exception {
 	}
 
-//	@Test
+	@Test
+	// Use case testing when no previously Gerrit server exists (getLastSavedGerritServer()==null)
 	public void testProcessCommandsNoSavedServer() {
-		r4eGerritTableView = new R4EGerritTableView();
+		R4EGUi = new R4EGerritUi();
+		R4EGUi.Ftracer = new Tracer();
+		PowerMockito.mockStatic(R4EGerritUi.class);
+		Mockito.when(R4EGerritUi.getDefault()).thenReturn(new R4EGerritUi());	
+		PowerMockito.mockStatic(R4EGerritServerUtility.class);
+		GerritCorePlugin gcp = new GerritCorePluginStub();		
+		
+		PowerMockito.mockStatic(GerritCorePlugin.class);
+		
+		Mockito.when(GerritCorePlugin.getDefault()).thenReturn(gcp);		
 		GerritConnector fConnector = mock(GerritConnector.class);
-		ReviewTableData fReviewTable = mock(ReviewTableData.class);
+
+		r4eGerritTableView = new R4EGerritTableView();
 		R4EGerritServerUtility fServerUtil = mock(R4EGerritServerUtility.class);
-		r4eGerritTableView.setConnector(fConnector);
-		r4eGerritTableView.setReviewTableData(fReviewTable);
+
 		r4eGerritTableView.setGerritServerUtility(fServerUtil);	
 		
 		String ret = null;
 		when(fServerUtil.getLastSavedGerritServer()).thenReturn(ret);	
 		
+		Map<TaskRepository, String> fMapRepoServer = new HashMap<TaskRepository, String>();
+		
+		fMapRepoServer.put( new TaskRepository(GerritConnector.CONNECTOR_KIND, "http://repository"), " ");
+		Mockito.when(R4EGerritServerUtility.getInstance()).thenReturn(fServerUtil);
+		Mockito.when(R4EGerritServerUtility.getInstance().getGerritMapping()).thenReturn(fMapRepoServer);		
+		Mockito.when(fServerUtil.getGerritMapping()).thenReturn(fMapRepoServer);		
+		
 		// Last saved is null, a repository must be defined.
 		r4eGerritTableView.processCommands(GerritQuery.CUSTOM);
 		
-	    assertEquals(r4eGerritTableView.getTaskRepository(),null);
+		assertNotNull(r4eGerritTableView.getTaskRepository());
 
 
-	
-
 	}
 
-//	@Test
+	@Test
+	// Use case testing when no previously Gerrit server exists (fServerUtil.getTaskRepo(lastSaved)==null)
 	public void testProcessCommandsNoGerritRepo() {
+		R4EGUi = new R4EGerritUi();
+		R4EGUi.Ftracer = new Tracer();
+		PowerMockito.mockStatic(R4EGerritUi.class);
+		Mockito.when(R4EGerritUi.getDefault()).thenReturn(new R4EGerritUi());		
+		
 		PowerMockito.mockStatic(R4EGerritServerUtility.class);
+		GerritCorePlugin gcp = new GerritCorePluginStub();		
+		
 		PowerMockito.mockStatic(GerritCorePlugin.class);
 		
-		Mockito.when(GerritCorePlugin.getDefault().getConnector()).thenReturn(null);		
+		Mockito.when(GerritCorePlugin.getDefault()).thenReturn(gcp);
+		GerritConnector fConnector = mock(GerritConnector.class);
 
 		r4eGerritTableView = new R4EGerritTableView();
-		GerritConnector fConnector = mock(GerritConnector.class);
 		ReviewTableData fReviewTable = mock(ReviewTableData.class);
 		R4EGerritServerUtility fServerUtil = mock(R4EGerritServerUtility.class);
 		r4eGerritTableView.setConnector(fConnector);
@@ -97,29 +120,45 @@
 		when(fServerUtil.getLastSavedGerritServer()).thenReturn("lastSavedGerritServer");
 		
 		
-		when(fServerUtil.getTaskRepo(anyString())).thenReturn( new TaskRepository(GerritConnector.CONNECTOR_KIND, "http://repository") );
+		when(fServerUtil.getTaskRepo(anyString())).thenReturn( null );
 		
 		// no server defined
 		Map<TaskRepository, String> fMapRepoServer = new HashMap<TaskRepository, String>();
+		
+		fMapRepoServer.put( new TaskRepository(GerritConnector.CONNECTOR_KIND, "http://repository"), " ");
+		Mockito.when(R4EGerritServerUtility.getInstance()).thenReturn(fServerUtil);
 		Mockito.when(R4EGerritServerUtility.getInstance().getGerritMapping()).thenReturn(fMapRepoServer);		
+		Mockito.when(fServerUtil.getGerritMapping()).thenReturn(fMapRepoServer);		
 
 		r4eGerritTableView.processCommands(GerritQuery.CUSTOM);
-		
-		// check what now ?
+	
+		Iterator it = fMapRepoServer.entrySet().iterator();
+		while (it.hasNext()) {
+		    assertEquals(r4eGerritTableView.getTaskRepository(),((Map.Entry) it.next()).getKey());
+		}	
+
 
 	}	
 	
-//	@Test
+	@Test
+	// Use case testing when one previously Gerrit server exists 
 	public void testProcessCommandsOneGerritRepo() {
+		R4EGUi = new R4EGerritUi();
+		R4EGUi.Ftracer = new Tracer();
+		PowerMockito.mockStatic(R4EGerritUi.class);
+		Mockito.when(R4EGerritUi.getDefault()).thenReturn(new R4EGerritUi());
 		
 		PowerMockito.mockStatic(R4EGerritServerUtility.class);
-		String msg = "testProcessCommands2";
-		String reason = "testProcessCommands2.";
-		R4EGerritUi.Ftracer.traceInfo(msg );
-		UIUtils.showErrorDialog(msg, reason);
+
+		GerritCorePlugin gcp = new GerritCorePluginStub();		
+		
+		PowerMockito.mockStatic(GerritCorePlugin.class);
+		
+		Mockito.when(GerritCorePlugin.getDefault()).thenReturn(gcp);
+		GerritConnector fConnector = mock(GerritConnector.class);		
 		
 		r4eGerritTableView = new R4EGerritTableView();
-		GerritConnector fConnector = mock(GerritConnector.class);
+//		GerritConnector fConnector = mock(GerritConnector.class);
 		ReviewTableData fReviewTable = mock(ReviewTableData.class);
 		R4EGerritServerUtility fServerUtil = mock(R4EGerritServerUtility.class);
 		r4eGerritTableView.setConnector(fConnector);
@@ -137,7 +176,6 @@
 		// one server defined
 		Map<TaskRepository, String> fMapRepoServer = new HashMap<TaskRepository, String>();
 		fMapRepoServer.put( new TaskRepository(GerritConnector.CONNECTOR_KIND, "http://repository"), " ");
-		Mockito.when(R4EGerritServerUtility.getInstance().getGerritMapping()).thenReturn(fMapRepoServer);
 
 		r4eGerritTableView.processCommands(GerritQuery.CUSTOM);
 
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
index 5191069..c1a7889 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit.ui/META-INF/MANIFEST.MF
@@ -26,4 +26,5 @@
  org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.model,
  org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils,
  org.eclipse.mylyn.reviews.r4egerrit.ui.views
-Import-Package: org.eclipse.mylyn.internal.gerrit.ui.editor
+Import-Package: org.eclipse.mylyn.internal.gerrit.ui.editor,
+ org.eclipse.mylyn.internal.gerrit.ui.operations
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 2259df0..77e24bc 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
@@ -38,19 +38,24 @@
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.mylyn.commons.workbench.DelayedRefreshJob;
 import org.eclipse.mylyn.internal.gerrit.core.GerritConnector;
 import org.eclipse.mylyn.internal.gerrit.core.GerritCorePlugin;
+import org.eclipse.mylyn.internal.gerrit.core.GerritOperationFactory;
 import org.eclipse.mylyn.internal.gerrit.core.GerritQuery;
 import org.eclipse.mylyn.internal.gerrit.core.client.GerritClient;
 import org.eclipse.mylyn.internal.gerrit.core.client.GerritException;
+import org.eclipse.mylyn.internal.gerrit.core.operations.GerritOperation;
+import org.eclipse.mylyn.internal.gerrit.ui.operations.GerritOperationDialog;
 import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
 import org.eclipse.mylyn.internal.tasks.core.ITaskListChangeListener;
 import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
 import org.eclipse.mylyn.internal.tasks.core.TaskContainerDelta;
 import org.eclipse.mylyn.internal.tasks.core.TaskTask;
 import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.internal.tasks.ui.actions.SynchronizeEditorAction;
 import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
 import org.eclipse.mylyn.reviews.r4e_gerrit.R4EGerritPlugin;
 import org.eclipse.mylyn.reviews.r4e_gerrit.core.R4EGerritTask;
@@ -65,11 +70,13 @@
 import org.eclipse.mylyn.reviews.r4e_gerrit.ui.internal.utils.UIUtils;
 import org.eclipse.mylyn.tasks.core.IRepositoryElement;
 import org.eclipse.mylyn.tasks.core.IRepositoryModel;
+import org.eclipse.mylyn.tasks.core.ITask;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
 import org.eclipse.mylyn.tasks.core.data.TaskData;
 import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
 import org.eclipse.mylyn.tasks.ui.TasksUi;
 import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
+import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
 import org.eclipse.mylyn.tasks.ui.editors.TaskEditorInput;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.ScrolledComposite;
@@ -86,6 +93,7 @@
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchActionConstants;
@@ -150,7 +158,7 @@
 
 	private GerritConnector fConnector = GerritCorePlugin.getDefault().getConnector();;
 
-	private TaskRepository fTaskRepository;
+	private TaskRepository fTaskRepository = null;
 	
 	private RepositoryQuery fCurrentQuery = null;
 
@@ -453,7 +461,25 @@
 		            editorInput = new TaskEditorInput(fTaskRepository, task);
 		        }
 		        String editorId = connectorUi.getTaskEditorId(task);
-				TasksUiUtil.openEditor(editorInput, editorId, null);
+				System.out.println("JBJB before  editorinout: " + editorInput.getName() + "\n\t editor id: " + editorId);
+				IEditorPart editorPart = TasksUiUtil.openEditor(editorInput, editorId, null);
+				if (editorPart instanceof TaskEditor) {
+					System.out.println("JBJB editorPart: " + editorPart + " Try to refreshed pages");
+					TaskEditor taskEditor = (TaskEditor) editorPart;
+					//Allow to open a Task even if not found locally yet
+					SynchronizeEditorAction synchAction = new SynchronizeEditorAction();
+					synchAction.selectionChanged(new StructuredSelection(taskEditor));
+					synchAction.run();
+
+//JBJB Seems not needed, we have not received the synch yet anyway, but we already have the LABELS FLAGS
+//					if (task instanceof R4EGerritTask) {
+//						//Refresh the table column with the appropriate data, so the "CR" and "V" column gets updated
+//						fReviewTable.updateReviewItem ((R4EGerritTask) task);
+//						refresh() ;
+//					}
+					
+				}
+				System.out.println("JBJB editorinout: " + editorInput.toString() + "\n\t editor id: " + editorId);
 			}
 		};
 	}
@@ -810,13 +836,14 @@
         // are handled by ITaskListChangeListener.containersChanged()
         GerritConnector connector = GerritCorePlugin.getDefault().getConnector();
         Job job = null;
-        try {
-            job = TasksUiInternal.synchronizeQuery(connector, query, null, true);
-		} catch (Exception e) {
-			if (job != null) {
-				job.cancel();
-			}
-		}
+        //JB test temp, remove the long query
+//        try {
+//            job = TasksUiInternal.synchronizeQuery(connector, query, null, true);
+//		} catch (Exception e) {
+//			if (job != null) {
+//				job.cancel();
+//			}
+//		}
     }
 	
     private R4EGerritTask[] getReviewList(TaskRepository repository, RepositoryQuery aQuery) throws R4EQueryException {
diff --git a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
index 7ee9b97..79b9275 100644
--- a/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
+++ b/org.eclipse.mylyn.reviews.r4e-gerrit/src/org/eclipse/mylyn/reviews/r4e_gerrit/core/R4EGerritTask.java
@@ -155,7 +155,7 @@
     private String getValue(TaskAttribute taskAttribute) {
         if (taskAttribute != null) {
             List<String> values = taskAttribute.getValues();
-            if (values.size() > 0) {
+            if (values != null && values.size() > 0) {
                 return values.get(0);
             }
         }