tuleap #781 Add reply button in message tab.
Change-Id: I4972e09aa80ebddf2c64929ca0b60969e87dfdb4
Signed-off-by: Jacques Bouthillier <lmcbout@gmail.com>
diff --git a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/commands/table/ReplyDialogHandler.java b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/commands/table/ReplyDialogHandler.java
index 04d3890..867f705 100644
--- a/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/commands/table/ReplyDialogHandler.java
+++ b/org.eclipse.egerrit.dashboard.ui/src/org/eclipse/egerrit/internal/dashboard/ui/commands/table/ReplyDialogHandler.java
@@ -32,7 +32,7 @@
if (getChangeInfo() != null && getGerritClient() != null) {
ReplyProcess replyProcess = new ReplyProcess();
replyProcess.handleReplyDialog(HandlerUtil.getActiveShell(event), getChangeInfo(), getGerritClient(),
- getLatestRevision());
+ getLatestRevision(), null);
}
return null;
}
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/ReplyProcess.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/ReplyProcess.java
index ab4476c..90818dd 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/ReplyProcess.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/process/ReplyProcess.java
@@ -23,6 +23,7 @@
import org.eclipse.egerrit.internal.core.exception.EGerritException;
import org.eclipse.egerrit.internal.core.rest.ReviewInput;
import org.eclipse.egerrit.internal.model.ChangeInfo;
+import org.eclipse.egerrit.internal.model.ChangeMessageInfo;
import org.eclipse.egerrit.internal.model.RevisionInfo;
import org.eclipse.egerrit.internal.ui.editors.QueryHelpers;
import org.eclipse.egerrit.internal.ui.utils.Messages;
@@ -47,8 +48,8 @@
}
public void handleReplyDialog(Shell shell, ChangeInfo changeInfo, GerritClient gerritClient,
- RevisionInfo selectedRevision) {
- UIUtils.replyToChange(shell, selectedRevision, null, gerritClient, false);
+ RevisionInfo selectedRevision, ChangeMessageInfo messageInfo) {
+ UIUtils.replyToChange(shell, selectedRevision, null, gerritClient, false, messageInfo);
CompletableFuture.runAsync(() -> QueryHelpers.loadBasicInformation(gerritClient, changeInfo, false))
.thenRun(() -> changeInfo.setUserSelectedRevision(selectedRevision));
}
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/ReplyHandler.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/ReplyHandler.java
index 0ae655e..ea78716 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/ReplyHandler.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/compare/ReplyHandler.java
@@ -52,7 +52,8 @@
UIUtils.displayInformation(Messages.ReplyHandlerTitle, Messages.ReplyHandlerMessage);
} else {
RevisionInfo revisionInfo = input.getChangeInfo().getRevisions().get(input.getLeftSide());
- UIUtils.replyToChange(viewer.getControl().getShell(), revisionInfo, null, input.gerritClient, true);
+ UIUtils.replyToChange(viewer.getControl().getShell(), revisionInfo, null, input.gerritClient, true,
+ null);
input.fireInputChange();
}
}
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 9144fa4..795954e 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
@@ -649,7 +649,7 @@
//Should open directly the reply dialog, no sub-menu
ReplyProcess replyProcess = new ReplyProcess();
replyProcess.handleReplyDialog(replyButton.getShell(), fChangeInfo, fGerritClient,
- fChangeInfo.getUserSelectedRevision());
+ fChangeInfo.getUserSelectedRevision(), null);
} else {
MenuManager mgr = new MenuManager();
buildReplyDynamicMenu(adjustedAllowedButton, mgr);
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyDialog.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyDialog.java
index ffe5997..a74e933 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyDialog.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyDialog.java
@@ -18,6 +18,7 @@
import java.util.Map.Entry;
import org.eclipse.egerrit.internal.core.GerritClient;
+import org.eclipse.egerrit.internal.model.ChangeMessageInfo;
import org.eclipse.egerrit.internal.model.CommentInfo;
import org.eclipse.egerrit.internal.model.FileInfo;
import org.eclipse.egerrit.internal.model.LabelInfo;
@@ -85,14 +86,16 @@
/**
* The constructor.
+ *
+ * @param messageInfo
*/
- public ReplyDialog(Shell shell, String reason, RevisionInfo revisionToReplyTo, GerritClient gerritClient) {
+ public ReplyDialog(Shell shell, String reason, RevisionInfo revisionToReplyTo, GerritClient gerritClient,
+ ChangeMessageInfo messageInfo) {
super(shell, Messages.ReplyDialog_0, buildMessage(reason, revisionToReplyTo), null, null);
fRevisionInfo = revisionToReplyTo;
fGerritClient = gerritClient;
permitted_labels = revisionToReplyTo.getChangeInfo().getSortedPermittedLabels();
labelsInfo = revisionToReplyTo.getChangeInfo().getLabels();
-
boolean isVoteAllowed = revisionToReplyTo.getId()
.equals(revisionToReplyTo.getChangeInfo().getCurrent_revision());
if (!isVoteAllowed) {
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyHandler.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyHandler.java
index c04d8ec..976af46 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyHandler.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/editors/ReplyHandler.java
@@ -56,7 +56,7 @@
if (fLabelText.equals(ActionConstants.REPLY.getLiteral())) {
//Deal with the reply dialog
replyProcess.handleReplyDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), fChangeInfo,
- fGerritClient, fChangeInfo.getUserSelectedRevision());
+ fGerritClient, fChangeInfo.getUserSelectedRevision(), null);
return;
} else if (fLabelText.equals(ReplyProcess.REPLY_ALL_BUTTONS)) {
//Adjust the list of labels which the current user can set to a maximum value
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/provider/HistoryTableMenuBuilder.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/provider/HistoryTableMenuBuilder.java
index 77bd3e0..8d62cb7 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/provider/HistoryTableMenuBuilder.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/table/provider/HistoryTableMenuBuilder.java
@@ -12,6 +12,11 @@
package org.eclipse.egerrit.internal.ui.table.provider;
import org.eclipse.egerrit.internal.core.GerritClient;
+import org.eclipse.egerrit.internal.model.ActionConstants;
+import org.eclipse.egerrit.internal.model.ChangeInfo;
+import org.eclipse.egerrit.internal.model.ChangeMessageInfo;
+import org.eclipse.egerrit.internal.model.RevisionInfo;
+import org.eclipse.egerrit.internal.process.ReplyProcess;
import org.eclipse.egerrit.internal.ui.table.filter.AuthorKindFilter;
import org.eclipse.egerrit.internal.ui.utils.Messages;
import org.eclipse.jface.action.Action;
@@ -20,10 +25,14 @@
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.ColumnViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.PlatformUI;
public class HistoryTableMenuBuilder {
private Menu commonMenu;
@@ -32,6 +41,8 @@
private FilterSelectionAction machineOnlyfilter = null;
+ private ReplyMessageAction replyMessages = null;
+
public void addPulldownMenu(ColumnViewer viewer, GerritClient client) {
MenuManager menuManager = new MenuManager();
if (viewer instanceof TableViewer) {
@@ -40,6 +51,7 @@
humanOnlyfilter = new FilterSelectionAction(Messages.UIHistoryTable_0, viewer, new AuthorKindFilter(false));
machineOnlyfilter = new FilterSelectionAction(Messages.UIHistoryTable_1, viewer,
new AuthorKindFilter(true));
+ replyMessages = new ReplyMessageAction(ActionConstants.REPLY.getLiteral(), viewer, client);
}
menuManager.addMenuListener(new IMenuListener() {
@Override
@@ -75,6 +87,8 @@
if (menu.getItemCount() == 0) {
if (viewer instanceof TableViewer) {
MenuManager menuMgr = new MenuManager();
+ menuMgr.add(replyMessages);
+ menuMgr.add(new Separator());
menuMgr.add(humanOnlyfilter);
menuMgr.add(machineOnlyfilter);
menuMgr.createContextMenu(menu.getShell()).setVisible(true);
@@ -91,4 +105,34 @@
}
}
}
+
+ private class ReplyMessageAction extends Action {
+ private StructuredViewer viewer;
+
+ private GerritClient gerritClient;
+
+ public ReplyMessageAction(String actionName, StructuredViewer viewer, GerritClient client) {
+ super(actionName, AS_PUSH_BUTTON);
+ this.viewer = viewer;
+ this.gerritClient = client;
+ }
+
+ @Override
+ public void run() {
+ ISelection selection = viewer.getSelection();
+ if (!selection.isEmpty() && selection instanceof StructuredSelection) {
+ IStructuredSelection struct = (IStructuredSelection) selection;
+ Object obj = struct.getFirstElement();
+ if (obj instanceof ChangeMessageInfo) {
+ ChangeMessageInfo messageInfo = (ChangeMessageInfo) obj;
+ ReplyProcess replyProcess = new ReplyProcess();
+ ChangeInfo changeInfo = (ChangeInfo) messageInfo.eContainer();
+ RevisionInfo revisionInfo = changeInfo.getRevisionByNumber(messageInfo.get_revision_number());
+ replyProcess.handleReplyDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ changeInfo, gerritClient, revisionInfo, messageInfo);
+ }
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/ActiveWorkspaceRevision.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/ActiveWorkspaceRevision.java
index 757041b..7807ef7 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/ActiveWorkspaceRevision.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/ActiveWorkspaceRevision.java
@@ -311,7 +311,7 @@
final Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
UIUtils.replyToChange(shell, fRevisionInContext,
Messages.ActiveWorkspaceRevision_0 + fRevisionInContext.getChangeInfo().getSubject() + "\"\n\n", //$NON-NLS-1$
- fGerritClient, false);
+ fGerritClient, false, null);
}
deactivateQuickDiff();
fRevisionInContext = null;
diff --git a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/UIUtils.java b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/UIUtils.java
index de6c346..aedd26d 100644
--- a/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/UIUtils.java
+++ b/org.eclipse.egerrit.ui/src/org/eclipse/egerrit/internal/ui/utils/UIUtils.java
@@ -26,6 +26,7 @@
import org.eclipse.egerrit.internal.core.rest.ReviewInput;
import org.eclipse.egerrit.internal.core.utils.Utils;
import org.eclipse.egerrit.internal.model.ChangeInfo;
+import org.eclipse.egerrit.internal.model.ChangeMessageInfo;
import org.eclipse.egerrit.internal.model.CommentInfo;
import org.eclipse.egerrit.internal.model.FileInfo;
import org.eclipse.egerrit.internal.model.ModelFactory;
@@ -120,10 +121,10 @@
}
public static void replyToChange(Shell shell, RevisionInfo revisionInfo, String reason, GerritClient client,
- boolean waitForDataRefresh) {
+ boolean waitForDataRefresh, ChangeMessageInfo messageInfo) {
String current = revisionInfo.getId();
QueryHelpers.loadDrafts(client, revisionInfo); //Force load the drafts to make sure they are shown in the dialog.
- final ReplyDialog replyDialog = new ReplyDialog(shell, reason, revisionInfo, client);
+ final ReplyDialog replyDialog = new ReplyDialog(shell, reason, revisionInfo, client, messageInfo);
Display.getDefault().syncExec(new Runnable() {
public void run() {
int ret = replyDialog.open();