blob: 6c9d74c42558bdc88f76e592f132a28323b91292 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2011 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.actions;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.mylyn.internal.tasks.core.TaskActivityManager;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
/**
* @author Jakub Jurkiewicz
* @author Mik Kersten
*/
public class TaskSelectionDialogWithRandom extends TaskSelectionDialog {
private static final int RANDOM_ID = IDialogConstants.CLIENT_ID + 1;
private Button randomTaskButton;
private boolean activateTask = false;
public TaskSelectionDialogWithRandom(Shell parent, boolean multi) {
super(parent, multi);
}
public TaskSelectionDialogWithRandom(Shell parent) {
super(parent);
}
@Override
protected void createAdditionalButtons(Composite parent) {
randomTaskButton = createButton(parent, RANDOM_ID, Messages.TaskSelectionDialog_Random_Task, false);
randomTaskButton.setToolTipText(Messages.TaskSelectionDialogWithRandom_Feeling_Lazy_Tooltip);
randomTaskButton.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
// ignore
}
public void widgetSelected(SelectionEvent se) {
try {
Set<ITask> selectedTasks = new HashSet<ITask>();
Set<ITask> allScheduled = ((TaskActivityManager) TasksUi.getTaskActivityManager()).getAllScheduledTasks();
if (!allScheduled.isEmpty()) {
selectedTasks.addAll(allScheduled);
// XXX bug 280939 make sure all scheduled tasks actually exist
selectedTasks.retainAll(TasksUiPlugin.getTaskList().getAllTasks());
}
if (selectedTasks.isEmpty()) {
selectedTasks.addAll(TasksUiPlugin.getTaskList().getAllTasks());
}
Set<ITask> potentialTasks = new HashSet<ITask>();
addLowEnergyTasks(selectedTasks, potentialTasks, PriorityLevel.P5);
addLowEnergyTasks(selectedTasks, potentialTasks, PriorityLevel.P4);
if (potentialTasks.isEmpty()) {
addLowEnergyTasks(selectedTasks, potentialTasks, PriorityLevel.P3);
}
if (potentialTasks.isEmpty()) {
addLowEnergyTasks(selectedTasks, potentialTasks, PriorityLevel.P2);
}
int randomTaskIndex = new Random().nextInt(potentialTasks.size());
ITask randomTask = potentialTasks.toArray(new ITask[potentialTasks.size()])[randomTaskIndex];
if (activateTask) {
TasksUi.getTaskActivityManager().activateTask(randomTask);
}
TasksUiInternal.refreshAndOpenTaskListElement(randomTask);
close();
} catch (Exception e) {
MessageDialog.openInformation(Display.getDefault().getActiveShell(),
Messages.TaskSelectionDialogWithRandom_Feeling_Lazy_Error_Title,
Messages.TaskSelectionDialogWithRandom_Feeling_Lazy_Error);
}
}
private void addLowEnergyTasks(Set<ITask> selectedTasks, Set<ITask> potentialTasks,
PriorityLevel priorityLevel) {
for (ITask task : selectedTasks) {
if (task.getSynchronizationState().isSynchronized() && !task.isCompleted()) {
if (priorityLevel.toString().equals(task.getPriority())) {
potentialTasks.add(task);
}
}
}
}
});
}
public boolean isActivateTask() {
return activateTask;
}
public void setActivateTask(boolean activateTask) {
this.activateTask = activateTask;
}
}