blob: 4a4670bb2d7c08eaa7cb27ecfbbfbf8702aa4fc5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Atlassian 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:
* Atlassian - initial API and implementation
******************************************************************************/
package com.atlassian.connector.eclipse.internal.crucible.ui.dialogs;
import com.atlassian.connector.eclipse.internal.crucible.core.client.CrucibleClient;
import com.atlassian.connector.eclipse.ui.dialogs.ProgressDialog;
import com.atlassian.theplugin.commons.crucible.api.model.Review;
import com.atlassian.theplugin.commons.crucible.api.model.Reviewer;
import com.atlassian.theplugin.commons.crucible.api.model.User;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import java.util.LinkedHashSet;
import java.util.Set;
public abstract class AbstractCrucibleReviewActionDialog extends ProgressDialog {
protected final Review review;
protected Review updatedReview;
protected final String userName;
protected final TaskRepository taskRepository;
protected final String taskKey;
protected final String taskId;
protected final CrucibleClient client;
protected boolean discardDrafts = false;
private final String actionText;
public String getTaskKey() {
return taskKey;
}
public AbstractCrucibleReviewActionDialog(Shell parentShell, Review review, String userName,
TaskRepository taskRepository, String taskKey, String taskId, CrucibleClient client, String actionText) {
super(parentShell);
this.review = review;
this.userName = userName;
this.taskRepository = taskRepository;
this.taskKey = taskKey;
this.taskId = taskId;
this.client = client;
this.actionText = actionText;
}
public String getTaskId() {
return taskId;
}
public TaskRepository getTaskRepository() {
return taskRepository;
}
public Review getUpdatedReview() {
return updatedReview;
}
public void handleUserDrafts(Composite draftComp) {
boolean hasDrafts = checkForDrafts();
if (hasDrafts) {
GridDataFactory.fillDefaults().grab(true, false).applyTo(
new Label(draftComp, SWT.SEPARATOR | SWT.HORIZONTAL));
final Label draftComments = new Label(draftComp, SWT.NONE);
final int numDraftComments = review.getNumberOfGeneralCommentsDrafts()
+ review.getNumberOfVersionedCommentsDrafts();
final String commentStr = numDraftComments == 1 ? "comment" : "comments";
draftComments.setText("You have " + numDraftComments + " draft "
+ commentStr + ". " + "Draft comments that aren't posted will be deleted.\n"
+ "Please choose an action:");
GridDataFactory.fillDefaults().span(2, 1).applyTo(draftComments);
Button deleteDrafts = new Button(draftComp, SWT.RADIO);
deleteDrafts.setText("Discard Drafts");
deleteDrafts.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
discardDrafts = true;
}
});
Button postDrafts = new Button(draftComp, SWT.RADIO);
postDrafts.setText("Post Drafts");
postDrafts.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
discardDrafts = false;
}
});
if (discardDrafts) {
deleteDrafts.setSelection(true);
} else {
postDrafts.setSelection(true);
}
}
}
private boolean checkForDrafts() {
if ((review.getNumberOfGeneralCommentsDrafts() + review.getNumberOfVersionedCommentsDrafts()) > 0) {
return true;
}
return false;
}
protected abstract void doAction();
@Override
protected void createButtonsForButtonBar(Composite parent) {
Button summarizeButton = createButton(parent, IDialogConstants.CLIENT_ID + 1, actionText, false);
summarizeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
doAction();
}
});
Button cancelButton = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
cancelButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
cancelPressed();
}
});
}
protected Reviewer getReviewer(User author) {
for (Reviewer reviewer : review.getReviewers()) {
if (reviewer.getUsername().equals(author.getUsername())) {
return reviewer;
}
}
return null;
}
protected Set<Reviewer> getOpenReviewers() {
Set<Reviewer> openReviewers = new LinkedHashSet<Reviewer>();
for (Reviewer reviewer : review.getReviewers()) {
if (!reviewer.isCompleted()) {
openReviewers.add(reviewer);
}
}
return openReviewers;
}
protected Set<Reviewer> getCompletedReviewers() {
Set<Reviewer> completedReviewers = new LinkedHashSet<Reviewer>();
for (Reviewer reviewer : review.getReviewers()) {
if (reviewer.isCompleted()) {
completedReviewers.add(reviewer);
}
}
return completedReviewers;
}
}