Merge "Tuleap #720 - Add comment menu not available"
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java
index c6f6bcb..8144458 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/Messages.java
@@ -41,6 +41,10 @@
 
 	public static String ReviewTableDefinition_verify;
 
+	public static String Starred;
+
+	public static String Not_Starred;
+
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java
index 4bab546..5d0cc79 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/ReviewTableLabelProvider.java
@@ -196,7 +196,11 @@
 			switch (aIndex) {
 			case 0:
 				Boolean starred = reviewSummary.isStarred();
-				return starred.toString(); // Needed for the sorter
+				if (starred) {
+					return Messages.Starred;
+				} else {
+					return Messages.Not_Starred;
+				}
 			case 1:
 				return Integer.toString(reviewSummary.get_number());
 			case 2:
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties
index f7a7c54..94ae5d8 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/model/messages.properties
@@ -19,3 +19,5 @@
 ReviewTableDefinition_status=Status
 ReviewTableDefinition_updated=Updated
 ReviewTableDefinition_verify=V
+Starred=Starred review
+Not_Starred=Not starred review
\ No newline at end of file
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java
index 070225f..cc7c48b 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/RebaseProcess.java
@@ -21,6 +21,7 @@
 import org.eclipse.egerrit.internal.model.ChangeInfo;
 import org.eclipse.egerrit.internal.model.RevisionInfo;
 import org.eclipse.egerrit.internal.ui.editors.QueryHelpers;
+import org.eclipse.egerrit.internal.ui.editors.RefreshRelatedEditors;
 import org.eclipse.egerrit.internal.ui.utils.Messages;
 import org.eclipse.jface.dialogs.InputDialog;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -81,10 +82,13 @@
 
 		try {
 			rebaseCmd.call();
+
 			//After a rebase, we reload and reset the user selected revision
 			//Note that here we are not using the model loader because we want a synchronous call so we can set the user selection
 			CompletableFuture.runAsync(() -> QueryHelpers.loadBasicInformation(gerritClient, changeInfo, false))
 					.thenRun(() -> changeInfo.setUserSelectedRevision(changeInfo.getRevision()));
+
+			new RefreshRelatedEditors(changeInfo, gerritClient).schedule();
 		} catch (EGerritException e1) {
 			if (e1.getCode() == EGerritException.SHOWABLE_MESSAGE) {
 				MessageDialog.open(MessageDialog.INFORMATION, null, Messages.RebaseProcess_failed,
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java
index 1d0c46a..969572f 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/SubmitProcess.java
@@ -20,6 +20,7 @@
 import org.eclipse.egerrit.internal.core.rest.SubmitInput;
 import org.eclipse.egerrit.internal.model.ChangeInfo;
 import org.eclipse.egerrit.internal.ui.editors.QueryHelpers;
+import org.eclipse.egerrit.internal.ui.editors.RefreshRelatedEditors;
 import org.eclipse.egerrit.internal.ui.utils.Messages;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.SWT;
@@ -42,6 +43,8 @@
 			//Note that here we are not using the model loader because we want a synchronous call so we can set the user selection
 			CompletableFuture.runAsync(() -> QueryHelpers.loadBasicInformation(gerritClient, changeInfo, false))
 					.thenRun(() -> changeInfo.setUserSelectedRevision(changeInfo.getRevision()));
+
+			new RefreshRelatedEditors(changeInfo, gerritClient).schedule();
 		} catch (EGerritException e3) {
 			EGerritCorePlugin.logError(gerritClient.getRepository().formatGerritVersion() + e3.getMessage());
 			MessageDialog.open(MessageDialog.INFORMATION, null, Messages.SubmitProcess_failed, e3.getLocalizedMessage(),
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java
index 4961b6f..136c2fe 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/GerritDifferences.java
@@ -17,35 +17,35 @@
 	/**
 	 * Difference constant (value 0) indicating no difference.
 	 */
-	public static final int NO_CHANGE = 0;
+	public static final int NO_CHANGE = Differencer.NO_CHANGE;
 
 	/**
 	 * Difference constant (value 1) indicating one side was added.
 	 */
-	public static final int ADDITION = 1;
+	public static final int ADDITION = 16 + Differencer.ADDITION;
 
 	/**
 	 * Difference constant (value 2) indicating one side was removed.
 	 */
-	public static final int DELETION = 2;
+	public static final int DELETION = 32 + Differencer.DELETION;
 
 	/**
 	 * Difference constant (value 3) indicating side changed.
 	 */
-	public static final int CHANGE = 3;
+	public static final int CHANGE = 64 + Differencer.CHANGE;
 
 	/**
 	 * Difference constant (value 4) indicating renaming.
 	 */
-	public static final int RENAMED = 4;
+	public static final int RENAMED = 128;
 
 	/**
 	 * Difference constant (value 5) indicating renaming.
 	 */
-	public static final int COPIED = 5;
+	public static final int COPIED = 256;
 
 	/**
 	 * Difference constant (value 6) indicating renaming.
 	 */
-	public static final int REWRITTEN = 6;
+	public static final int REWRITTEN = 512;
 }
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java
index a1b811d..ab516e9 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ChangeDetailEditor.java
@@ -543,6 +543,7 @@
 
 				try {
 					abandonCmd.call();
+					new RefreshRelatedEditors(fChangeInfo, fGerritClient).schedule();
 				} catch (EGerritException e3) {
 					EGerritCorePlugin.logError(fGerritClient.getRepository().formatGerritVersion() + e3.getMessage());
 				}
@@ -568,6 +569,7 @@
 
 				try {
 					restoreCmd.call();
+					new RefreshRelatedEditors(fChangeInfo, fGerritClient).schedule();
 				} catch (EGerritException e3) {
 					EGerritCorePlugin.logError(fGerritClient.getRepository().formatGerritVersion() + e3.getMessage());
 				}
@@ -585,6 +587,7 @@
 				RebaseProcess rebaseProcess = new RebaseProcess();
 				rebaseProcess.handleRebase(rebaseButton.getShell(), fChangeInfo, fChangeInfo.getUserSelectedRevision(),
 						fGerritClient);
+
 			}
 		});
 
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/RefreshRelatedEditors.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/RefreshRelatedEditors.java
new file mode 100644
index 0000000..5444911
--- /dev/null
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/RefreshRelatedEditors.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Ericsson AB.
+ * 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:
+ *     Ericsson - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.egerrit.internal.ui.editors;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.egerrit.internal.core.GerritClient;
+import org.eclipse.egerrit.internal.model.ChangeInfo;
+import org.eclipse.egerrit.internal.model.RelatedChangeAndCommitInfo;
+import org.eclipse.egerrit.internal.ui.editors.model.ChangeDetailEditorInput;
+import org.eclipse.egerrit.internal.ui.utils.Messages;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Class that, when run, refreshes opened related changes in Egerrit editors.
+ */
+public class RefreshRelatedEditors extends Job {
+
+	private ChangeInfo fChangeInfo;
+
+	private GerritClient fGerritClient;
+
+	public RefreshRelatedEditors(ChangeInfo changeInfo, GerritClient gerritClient) {
+		super(Messages.ChangeDetailEditor_updatingRelatedChanges);
+		fChangeInfo = changeInfo;
+		fGerritClient = gerritClient;
+	}
+
+	@Override
+	public IStatus run(IProgressMonitor monitor) {
+		/* Get list of related changes and remove current one */
+		List<String> changeIds = new ArrayList<String>();
+		for (RelatedChangeAndCommitInfo change : fChangeInfo.getRelatedChanges().getChanges()) {
+			if (change.getChange_id() != null && !change.getChange_id().equals(fChangeInfo.getChange_id())) {
+				changeIds.add(change.getChange_id());
+			}
+		}
+		if (changeIds.size() == 0) {
+			return Status.OK_STATUS;
+		}
+
+		//Obtain the list of editors opened
+		IEditorReference[][] editorRefs = new IEditorReference[1][];
+		Display.getDefault().syncExec(() -> {
+			editorRefs[0] = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
+		});
+
+		/* Iterate over all the open editors in the workbench */
+		for (IEditorReference editorRef : editorRefs[0]) {
+			/* Check for the opened EGerrit editors */
+			IEditorPart part = editorRef.getEditor(false);
+
+			if (part instanceof ChangeDetailEditor) {
+				ChangeDetailEditorInput changeInput = (ChangeDetailEditorInput) part.getEditorInput();
+				if (!changeInput.getChange().getChange_id().equals(fChangeInfo.getChange_id())) {
+					if (changeIds.contains(changeInput.getChange().getChange_id())) {
+						QueryHelpers.loadBasicInformation(fGerritClient, changeInput.getChange(), true);
+					}
+				}
+			}
+		}
+		return Status.OK_STATUS;
+	}
+}
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java
index 3f62eaa..0d52fcc 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/model/FilesTableModel.java
@@ -29,9 +29,9 @@
 // Moveable, Alignment}
 public enum FilesTableModel implements ITableModel {
 	// 			Name 			                               Width 	Resize Moveable Alignment
-	REVIEWED("", 30, true, true, SWT.LEFT), //$NON-NLS-1$
+	REVIEWED("", 35, true, true, SWT.LEFT), //$NON-NLS-1$
 	MOD_TYPE("", 30, true, true, SWT.LEFT), //$NON-NLS-1$
-	FILE_PATH(Messages.FilesTableDefinition_filePath, 540, true, true, SWT.LEFT), //
+	FILE_PATH(Messages.FilesTableDefinition_filePath, 250, true, true, SWT.LEFT), //
 	COMMENTS(Messages.FilesTableDefinition_comments, 220, true, true, SWT.LEFT), //
 	SIZE(Messages.FilesTableDefinition_size, 80, false, true, SWT.LEFT);
 
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java
index 5cbf7cf..cdf1bc8 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/Messages.java
@@ -84,6 +84,8 @@
 
 	public static String ChangeDetailEditor_cherryPickBranch;
 
+	public static String ChangeDetailEditor_updatingRelatedChanges;
+
 	public static String CheckoutRevision_0;
 
 	public static String CheckoutRevision_1;
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties
index d2630ec..e1fdb5a 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/messages.properties
@@ -44,6 +44,7 @@
 ChangeDetailEditor_7=Markers for patchset 
 ChangeDetailEditor_9=Reload this change from the server.
 ChangeDetailEditor_cherryPickBranch=Cherry pick change to a different branch
+ChangeDetailEditor_updatingRelatedChanges=Updating opened related changes
 CheckoutRevision_0=Checkout...
 CheckoutRevision_1=No repository found
 CheckoutRevision_12=Change " {0} " \ has previously been checked out in branch " {1} ".\n\n\