Java tutorial
/******************************************************************************* * 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; } }