diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
13 files changed, 200 insertions, 34 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF index 36dd69cc8..8914c50a3 100644 --- a/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF @@ -11,7 +11,8 @@ Require-Bundle: org.eclipse.ui, org.eclipse.ui.forms, org.eclipse.jdt.ui, org.eclipse.pde.ui, - org.eclipse.mylar.core + org.eclipse.mylar.core, + org.eclipse.mylar.monitor Eclipse-AutoStart: true Bundle-Vendor: University of British Columbia Bundle-ClassPath: mylar-tasklist.jar diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java index 5a29a92f7..699cffbfd 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ITask.java @@ -44,7 +44,7 @@ public interface ITask extends Serializable, ITaskListElement { public abstract boolean isActive(); - public abstract void setActive(boolean active); + public abstract void setActive(boolean active, boolean isStalled); public abstract boolean isCompleted(); @@ -104,6 +104,14 @@ public interface ITask extends Serializable, ITaskListElement { public abstract String getEndDateString(); + + public abstract Date getCreationDate(); + + public abstract void setCreationDate(String date); + + public abstract String getCreationDateString(); + + public abstract void setReminderDate(Date date); public abstract void setReminderDate(String date); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java index 220027d34..0319ff3c6 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/Task.java @@ -62,6 +62,7 @@ public class Task implements ITask { private Date timeActivated = null; private Date endDate = null; + private Date creationDate = null; private Date reminderDate=null; private long elapsed; /** @@ -88,11 +89,14 @@ public class Task implements ITask { this.path = path; } } - - public Task(String handle, String label) { + + public Task(String handle, String label, boolean newTask) { this.handle = handle; this.label = label; this.path = handle; + if(newTask){ + creationDate = new Date(); + } } public String getHandle() { @@ -118,24 +122,27 @@ public class Task implements ITask { public Object getAdapter(Class adapter) { return null; } - + /** * Package visible in order to prevent sets that don't update the index. */ - public void setActive(boolean active) { + public void setActive(boolean active, boolean isStalled) { this.active = active; - if (active) { + if (active && !isStalled) { timeActivated = new Date(); } else { - calculateElapsedTime(); + calculateElapsedTime(isStalled); timeActivated = null; } } - private void calculateElapsedTime() { + private void calculateElapsedTime(boolean isStalled) { if (timeActivated == null) return; elapsed += new Date().getTime() - timeActivated.getTime(); + if(isStalled){ + elapsed-=TaskListManager.INACTIVITY_TIME_MILLIS; + } if (isActive()) { timeActivated = new Date(); } else { @@ -275,14 +282,14 @@ public class Task implements ITask { public String getElapsedTime() { if (isActive()) { - calculateElapsedTime(); + calculateElapsedTime(false); } return "" + elapsed; } public long getElapsedTimeLong() { if (isActive()) { - calculateElapsedTime(); + calculateElapsedTime(false); } return elapsed; } @@ -360,7 +367,7 @@ public class Task implements ITask { } public String getElapsedTimeForDisplay() { - calculateElapsedTime(); + calculateElapsedTime(false); return DateUtil.getFormattedDuration(elapsed); } @@ -501,4 +508,34 @@ public class Task implements ITask { return ""; } } + + public Date getCreationDate() { + return creationDate; + } + + public void setCreationDate(String date) { + if (!date.equals("")) { + String formatString = "yyyy-MM-dd HH:mm:ss.S z"; + SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH); + try { + creationDate = format.parse(date); + } catch (ParseException e) { + MylarPlugin.log(e, "Could not parse end date"); + creationDate = null; + } + } else { + + } + } + + + public String getCreationDateString() { + if (creationDate != null) { + String f = "yyyy-MM-dd HH:mm:ss.S z"; + SimpleDateFormat format = new SimpleDateFormat(f, Locale.ENGLISH); + return format.format(creationDate); + } else { + return ""; + } + } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskActiveTimerListener.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskActiveTimerListener.java new file mode 100644 index 000000000..16cfb4687 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskActiveTimerListener.java @@ -0,0 +1,54 @@ +package org.eclipse.mylar.tasklist; + +import java.util.Date; + +import org.eclipse.mylar.core.InteractionEvent; +import org.eclipse.mylar.monitor.IInteractionEventListener; +import org.eclipse.mylar.monitor.MylarMonitorPlugin; +import org.eclipse.mylar.monitor.planning.ActiveTimerThread; +import org.eclipse.mylar.monitor.planning.IActiveTimerListener; + +public class TaskActiveTimerListener implements IActiveTimerListener, IInteractionEventListener { + + private ActiveTimerThread timer; + + private ITask task; + + private boolean isTaskStalled = false; + + public TaskActiveTimerListener(ITask task){ + this.task = task; + timer = new ActiveTimerThread(TaskListManager.INACTIVITY_TIME, this); + timer.start(); + MylarMonitorPlugin.getDefault().addListener(this); + } + + public void fireTimedOut() { + task.setActive(task.isActive(), true); + isTaskStalled = true; + System.out.println(task.getElapsedTimeForDisplay()); + System.out.println(new Date()); + timer.resetTimer(); + } + + public void interactionObserved(InteractionEvent event) { + System.out.println("interaction > " + task.getElapsedTimeForDisplay()); + timer.resetTimer(); + + if(isTaskStalled){ + task.setActive(task.isActive(), false); + } + isTaskStalled = false; + } + + public void start() {} + + public void stopTimer() { + timer.killThread(); + MylarMonitorPlugin.getDefault().removeListener(this); + System.out.println("listener removed"); + } + + public void stop() {} + +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java index 2380536b7..38583f9a5 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/TaskListManager.java @@ -15,7 +15,9 @@ package org.eclipse.mylar.tasklist; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.eclipse.mylar.core.MylarPlugin; import org.eclipse.mylar.tasklist.internal.RelativePathUtil; @@ -28,6 +30,12 @@ import org.eclipse.mylar.tasklist.internal.TaskList; */ public class TaskListManager { + public static final int INACTIVITY_TIME = 5; // in minutes + + public static final long INACTIVITY_TIME_MILLIS = INACTIVITY_TIME * 1000 * 60; + + private Map<ITask, TaskActiveTimerListener> listenerMap = new HashMap<ITask, TaskActiveTimerListener>(); + private File taskListFile; private TaskList taskList = new TaskList(); private List<ITaskActivityListener> listeners = new ArrayList<ITaskActivityListener>(); @@ -95,7 +103,10 @@ public class TaskListManager { } public void deleteTask(ITask task) { - taskList.setActive(task, false); + TaskActiveTimerListener activeListener = listenerMap.remove(task); + if(activeListener != null) + activeListener.stopTimer(); + taskList.setActive(task, false, false); taskList.deleteTask(task); } @@ -118,12 +129,17 @@ public class TaskListManager { } taskList.clearActiveTasks(); } - taskList.setActive(task, true); + taskList.setActive(task, true, false); + TaskActiveTimerListener activeListener = new TaskActiveTimerListener(task); + listenerMap.put(task, activeListener); for (ITaskActivityListener listener : listeners) listener.taskActivated(task); } public void deactivateTask(ITask task) { - taskList.setActive(task, false); + TaskActiveTimerListener activeListener = listenerMap.remove(task); + if(activeListener != null) + activeListener.stopTimer(); + taskList.setActive(task, false, false); for (ITaskActivityListener listener : listeners) listener.taskDeactivated(task); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java index 2349f367d..34aaeb35c 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/DefaultTaskListExternalizer.java @@ -49,6 +49,7 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { public static final String TRUE = "true"; public static final String NAME = "Name"; public static final String END_DATE = "EndDate"; + public static final String CREATION_DATE = "CreationDate"; public static final String REMINDER_DATE = "ReminderDate"; public static final String REMINDED = "Reminded"; @@ -108,7 +109,8 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { node.setAttribute(NOTES, task.getNotes()); node.setAttribute(ELAPSED, task.getElapsedTime()); node.setAttribute(ESTIMATED, ""+task.getEstimateTime()); - node.setAttribute(END_DATE, task.getEndDateString()); + node.setAttribute(END_DATE, task.getEndDateString()); + node.setAttribute(CREATION_DATE, task.getCreationDateString()); node.setAttribute(REMINDER_DATE, task.getReminderDateString(false)); if (task.hasBeenReminded()) { node.setAttribute(REMINDED, TRUE); @@ -178,7 +180,7 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { } else { label = "Description was corrupted in stored tasklist"; } - Task task = new Task(handle, label); + Task task = new Task(handle, label, false); readTaskInfo(task, tlist, element, category, parent); return task; } @@ -196,11 +198,11 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { } if (element.getAttribute(ACTIVE).compareTo(TRUE) == 0) { - task.setActive(true); - tlist.setActive(task, true); + task.setActive(true, false); + tlist.setActive(task, true, false); new TaskActivateAction(task).run(); } else { - task.setActive(false); + task.setActive(false, false); } if (element.hasAttribute(NOTES)) { task.setNotes(element.getAttribute(NOTES)); @@ -234,6 +236,11 @@ public class DefaultTaskListExternalizer implements ITaskListExternalizer { } else { task.setEndDate(""); } + if (element.hasAttribute(CREATION_DATE)) { + task.setCreationDate(element.getAttribute(CREATION_DATE)); + } else { + task.setCreationDate(""); + } if (element.hasAttribute(REMINDER_DATE)) { task.setReminderDate(element.getAttribute(REMINDER_DATE)); } else { diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskList.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskList.java index 3314a43c1..bd716e0bf 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskList.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/internal/TaskList.java @@ -59,13 +59,14 @@ public class TaskList implements Serializable { categories.add(cat); } - public void setActive(ITask task, boolean active) { - task.setActive(active); + public void setActive(ITask task, boolean active, boolean isStalled) { + task.setActive(active, isStalled); if (active && !activeTasks.contains(task)) { activeTasks.add(task); } else if(!active){ activeTasks.remove(task); } + } public void deleteTask(ITask task) { @@ -191,7 +192,7 @@ public class TaskList implements Serializable { } public void clearActiveTasks() { for (ITask task : activeTasks) { - task.setActive(false); + task.setActive(false, false); } activeTasks.clear(); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java index cbdda0c80..bddd1155f 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/internal/TaskReportGenerator.java @@ -58,6 +58,7 @@ public class TaskReportGenerator { } } } + // TODO need to support handling things in the bugzilla registry for (ITasksCollector collector : collectors) { tasks.addAll(collector.getTasks()); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java index ebdcf8ed4..2642884ff 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameEditorPart.java @@ -42,7 +42,7 @@ public class PlanningGameEditorPart extends EditorPart { private PlanningGameEditorInput editorInput = null; private Table table; private TableViewer tableViewer; - private String[] columnNames = new String[] { "Description", "Priority", "Date Completed", "Duration"}; + private String[] columnNames = new String[] { "Description", "Priority", "Date Created", "Date Completed", "Duration"}; @Override public void doSave(IProgressMonitor monitor) { @@ -143,6 +143,7 @@ public class PlanningGameEditorPart extends EditorPart { table.setLinesVisible(true); table.setHeaderVisible(true); + table.setEnabled(true); TableColumn column = new TableColumn(table, SWT.LEFT, 0); column.setText(columnNames[0]); @@ -167,17 +168,27 @@ public class PlanningGameEditorPart extends EditorPart { column = new TableColumn(table, SWT.LEFT, 2); column.setText(columnNames[2]); - column.setWidth(200); + column.setWidth(170); column.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - tableViewer.setSorter(new PlanningGameSorter(PlanningGameSorter.DATE)); + tableViewer.setSorter(new PlanningGameSorter(PlanningGameSorter.CREATION_DATE)); } }); - column = new TableColumn(table, SWT.LEFT, 3); column.setText(columnNames[3]); + column.setWidth(170); + column.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + tableViewer.setSorter(new PlanningGameSorter(PlanningGameSorter.COMPLETED_DATE)); + } + }); + + + column = new TableColumn(table, SWT.LEFT, 4); + column.setText(columnNames[4]); column.setWidth(100); column.addSelectionListener(new SelectionAdapter() { @Override diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameLabelProvider.java index 80bfb92c9..a99a46866 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameLabelProvider.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameLabelProvider.java @@ -36,8 +36,10 @@ public class PlanningGameLabelProvider extends LabelProvider implements case 1: return task.getPriority(); case 2: - return task.getEndDateString(); + return task.getCreationDateString(); case 3: + return task.getEndDateString(); + case 4: return task.getElapsedTimeForDisplay(); } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameSorter.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameSorter.java index a2869f358..e148e930a 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameSorter.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/report/ui/PlanningGameSorter.java @@ -25,8 +25,9 @@ public class PlanningGameSorter extends ViewerSorter { */ public final static int DESCRIPTION = 1; public final static int PRIORITY = 2; - public final static int DATE = 3; - public final static int DURATION = 4; + public final static int CREATION_DATE = 3; + public final static int COMPLETED_DATE = 4; + public final static int DURATION = 5; // Criteria that the instance uses private int criteria; @@ -52,8 +53,10 @@ public class PlanningGameSorter extends ViewerSorter { return compareDescription(t1, t2); case PRIORITY: return comparePriority(t1, t2); - case DATE: - return compareDate(t1, t2); + case CREATION_DATE: + return compareCreationDate(t1, t2); + case COMPLETED_DATE: + return compareCompletedDate(t1, t2); case DURATION: return compareDuration(t1, t2); default: @@ -69,9 +72,13 @@ public class PlanningGameSorter extends ViewerSorter { return task1.getPriority().compareTo(task2.getPriority()); } - private int compareDate(ITask task1, ITask task2) { + private int compareCompletedDate(ITask task1, ITask task2) { return task2.getEndDate().compareTo(task1.getEndDate()); } + + private int compareCreationDate(ITask task1, ITask task2) { + return task2.getCreationDate().compareTo(task1.getCreationDate()); + } private int compareDuration(ITask task1, ITask task2) { return task1.getElapsedTimeLong() < task2.getElapsedTimeLong() ? 1 : -1; diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/TaskSummaryEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/TaskSummaryEditor.java index 81e8dbd19..ccbef55d8 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/TaskSummaryEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/TaskSummaryEditor.java @@ -468,6 +468,27 @@ public class TaskSummaryEditor extends EditorPart { text2.setLayoutData(td); text2.setEditable(false); text2.setEnabled(false); + + l = toolkit.createLabel(container, "Task Creation Date:"); + l.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); + Text creationDate = toolkit.createText(container,task.getCreationDateString(), SWT.BORDER); + td = new TableWrapData(TableWrapData.FILL_GRAB); + td.grabHorizontal = true; + td.colspan = 2; + creationDate.setLayoutData(td); + creationDate.setEditable(false); + creationDate.setEnabled(false); + + l = toolkit.createLabel(container, "Task Completed Date:"); + l.setForeground(toolkit.getColors().getColor(FormColors.TITLE)); + Text endDate = toolkit.createText(container,task.getEndDateString(), SWT.BORDER); + td = new TableWrapData(TableWrapData.FILL_GRAB); + td.grabHorizontal = true; + td.colspan = 2; + endDate.setLayoutData(td); + endDate.setEditable(false); + endDate.setEnabled(false); + //text2.setForeground(background); } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/CreateTaskAction.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/CreateTaskAction.java index 92896ce87..96aa52761 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/CreateTaskAction.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasklist/ui/actions/CreateTaskAction.java @@ -46,7 +46,7 @@ public class CreateTaskAction extends Action { int dialogResult = dialog.open(); if (dialogResult == Window.OK) { Task newTask = new Task(MylarTasklistPlugin.getTaskListManager() - .genUniqueTaskId(), dialog.getTaskname()); + .genUniqueTaskId(), dialog.getTaskname(), true); newTask.setPriority(dialog.getSelectedPriority()); newTask.setReminderDate(dialog.getReminderDate()); |