blob: bc34ea1306107ddffddf33481d9266eab4bd21f8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2013 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.context;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.wizard.ProgressMonitorPart;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.mylyn.commons.workbench.WorkbenchUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.AttachmentUtil;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskAttachment;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import com.ibm.icu.text.DateFormat;
/**
* @author Steffen Pingel
*/
public class RetrieveLatestContextDialog extends MessageDialog {
public static boolean openQuestion(Shell shell, ITask task) {
TaskRepository repository = TasksUi.getRepositoryManager().getRepository(task.getConnectorKind(),
task.getRepositoryUrl());
List<ITaskAttachment> contextAttachments = AttachmentUtil.getContextAttachments(repository, task);
Collections.sort(contextAttachments, new TaskAttachmentComparator());
if (contextAttachments.size() > 0) {
ITaskAttachment attachment = contextAttachments.get(0);
String author = null;
if (attachment.getAuthor() != null) {
author = (attachment.getAuthor().getName()) != null
? attachment.getAuthor().getName()
: attachment.getAuthor().getPersonId();
}
if (author == null) {
author = Messages.RetrieveLatestContextDialog_Unknown;
}
Date date = attachment.getCreationDate();
String dateString = null;
if (date != null) {
dateString = DateFormat.getDateInstance(DateFormat.LONG).format(date);
}
if (dateString == null) {
dateString = Messages.RetrieveLatestContextDialog_Unknown;
}
String message = NLS.bind(Messages.RetrieveLatestContextDialog_No_local_context_exists, author, dateString);
int kind = QUESTION;
int style = SWT.NONE;
RetrieveLatestContextDialog dialog = new RetrieveLatestContextDialog(shell,
Messages.RetrieveLatestContextDialog_Dialog_Title, null, message, kind, new String[] {
IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL }, 0, task, attachment);
style &= SWT.SHEET;
dialog.setShellStyle(dialog.getShellStyle() | style);
return dialog.open() == 0;
}
return false;
}
private final ITaskAttachment attachment;
private Link link;
private ProgressContainer progressContainer;
private ProgressMonitorPart progressMonitorPart;
private final ITask task;
public RetrieveLatestContextDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage,
String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex, ITask task,
ITaskAttachment attachment) {
super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels,
defaultIndex);
this.task = task;
this.attachment = attachment;
}
@Override
protected void buttonPressed(int buttonId) {
if (progressContainer.isActive()) {
return;
}
if (buttonId == 0) {
if (!AttachmentUtil.downloadContext(task, attachment, progressContainer)) {
// failed
return;
}
}
super.buttonPressed(buttonId);
}
@Override
protected Control createButtonBar(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(GridLayoutFactory.fillDefaults().numColumns(3).create());
GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(composite);
Control control = createLink(composite);
GridDataFactory.fillDefaults().grab(true, false).applyTo(control);
super.createButtonBar(composite);
return composite;
}
@Override
protected Control createContents(Composite parent) {
Control control = super.createContents(parent);
progressContainer.setCancelButton(getButton(1));
getButton(0).setFocus();
return control;
}
@Override
protected Control createCustomArea(Composite parent) {
progressMonitorPart = new ProgressMonitorPart(parent, null);
GridDataFactory.fillDefaults().grab(true, false).applyTo(progressMonitorPart);
progressContainer = new ProgressContainer(getShell(), progressMonitorPart) {
@Override
protected void restoreUiState(Map<Object, Object> state) {
link.setEnabled(true);
getButton(0).setEnabled(true);
getButton(1).setEnabled(true);
};
@Override
protected void saveUiState(Map<Object, Object> savedState) {
link.setEnabled(false);
getButton(0).setEnabled(false);
};
};
return progressMonitorPart;
}
protected Control createLink(Composite parent) {
link = new Link(parent, SWT.NONE);
link.setText(Messages.RetrieveLatestContextDialog_Show_All_Contexts_Label);
link.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
close();
ContextRetrieveWizard wizard = new ContextRetrieveWizard(task);
WizardDialog dialog = new WizardDialog(WorkbenchUtil.getShell(), wizard);
dialog.create();
dialog.setBlockOnOpen(true);
setReturnCode(dialog.open());
}
});
return link;
}
}