org.eclipse.mylar.tasks.core
Class TaskList

java.lang.Object
  extended by org.eclipse.mylar.tasks.core.TaskList

public class TaskList
extends java.lang.Object

TODO: some asymetry left between query containers and other task containers

Author:
Mik Kersten

Field Summary
private  java.util.List<ITask> activeTasks
           
private  TaskArchive archiveContainer
           
private  java.util.Set<AbstractTaskContainer> categories
           
private  java.util.List<ITaskListChangeListener> changeListeners
           
static java.lang.String LABEL_ROOT
           
private  int lastTaskNum
           
private  java.util.Set<AbstractRepositoryQuery> queries
           
private  java.util.Map<java.lang.String,AbstractQueryHit> queryHits
           
private  TaskCategory rootCategory
           
private  java.util.Map<java.lang.String,ITask> tasks
           
 
Constructor Summary
TaskList()
           
 
Method Summary
 void addCategory(AbstractTaskContainer category)
           
 void addChangeListener(ITaskListChangeListener listener)
           
 void addQuery(AbstractRepositoryQuery query)
           
 void addQueryHit(AbstractQueryHit hit)
          called by AbstractRepositoryQuery
 void addTask(ITask task)
           
 void addTask(ITask task, AbstractTaskContainer category)
           
 void deleteCategory(AbstractTaskContainer category)
           
 void deleteQuery(AbstractRepositoryQuery query)
           
 void deleteTask(ITask task)
          TODO: refactor around querying containers for their tasks Task is removed from all containers: root, archive, category, and tasks catchall (Currently no support for deletion of subtasks)
 int findLargestTaskHandle()
          Note: use getNextTaskNum for new task construction
 ITask getActiveTask()
          HACK: returns first
 java.util.List<ITask> getActiveTasks()
           
 java.util.Collection<ITask> getAllTasks()
           
 TaskArchive getArchiveContainer()
           
 java.util.Set<AbstractTaskContainer> getCategories()
           
 java.util.List<ITaskListChangeListener> getChangeListeners()
          Exposed for unit testing
 AbstractTaskContainer getContainerForHandle(java.lang.String categoryHandle)
           
 int getLastTaskNum()
          For tasklist persistence.
 int getNextTaskNum()
           
 java.util.Set<AbstractRepositoryQuery> getQueries()
           
 java.util.Set<AbstractRepositoryQuery> getQueriesForHandle(java.lang.String handle)
          if handle == null or no queries found an empty set is returned *
 AbstractRepositoryQuery getQueryForHandle(java.lang.String handle)
           
 AbstractQueryHit getQueryHit(java.lang.String handle)
           
 java.util.Set<AbstractQueryHit> getQueryHits()
          for testing
 java.util.Set<AbstractQueryHit> getQueryHits(java.util.Set<java.lang.String> handles)
          if handle == null or no query hits found an empty set is returned *
 java.util.Set<AbstractRepositoryQuery> getRepositoryQueries(java.lang.String repositoryUrl)
          return all queries for the given repository url
 java.util.Set<AbstractRepositoryTask> getRepositoryTasks(java.lang.String repositoryUrl)
          return all tasks for the given repository url
 TaskCategory getRootCategory()
           
 java.util.Set<ITaskListElement> getRootElements()
           
 java.util.Set<ITask> getRootTasks()
           
 ITask getTask(java.lang.String handleIdentifier)
           
 java.util.Set<AbstractTaskContainer> getTaskContainers()
           
 java.util.List<AbstractTaskContainer> getUserCategories()
           
 void internalAddCategory(AbstractTaskContainer cat)
          NOTE: Only public so that other externalizers can use it
 void internalAddQuery(AbstractRepositoryQuery query)
           
 void internalAddRootTask(ITask task)
           
 void internalAddTask(ITask task, AbstractTaskContainer container)
           
 boolean isEmpty()
           
private  int largestTaskHandleHelper(java.util.Collection<ITask> tasks)
           
 void markComplete(ITask task, boolean complete)
           
 void moveToContainer(AbstractTaskContainer toContainer, ITask task)
           
 void moveToRoot(ITask task)
           
 void notifyContainerUpdated(AbstractTaskContainer container)
           
 void notifyLocalInfoChanged(ITask task)
          TODO: refactor into task deltas?
 void notifyRepositoryInfoChanged(ITask task)
           
 void refactorRepositoryUrl(java.lang.Object oldUrl, java.lang.String newUrl)
           
 void removeChangeListener(ITaskListChangeListener listener)
           
 void removeFromCategory(TaskCategory category, ITask task)
           
 void removeFromRoot(ITask task)
           
 void removeOrphanedHits()
          Orphaned hits arise when no query in the tasklist references a hit in the master list maintained by the tasklist.
 void renameContainer(AbstractTaskContainer container, java.lang.String newDescription)
           
 void renameTask(Task task, java.lang.String description)
           
 void reset()
          Public for testing.
 void setActive(ITask task, boolean active)
           
 void setLastTaskNum(int lastTaskNum)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LABEL_ROOT

public static final java.lang.String LABEL_ROOT
See Also:
Constant Field Values

lastTaskNum

private int lastTaskNum

changeListeners

private java.util.List<ITaskListChangeListener> changeListeners

tasks

private java.util.Map<java.lang.String,ITask> tasks

queryHits

private java.util.Map<java.lang.String,AbstractQueryHit> queryHits

archiveContainer

private TaskArchive archiveContainer

rootCategory

private TaskCategory rootCategory

categories

private java.util.Set<AbstractTaskContainer> categories

queries

private java.util.Set<AbstractRepositoryQuery> queries

activeTasks

private java.util.List<ITask> activeTasks
Constructor Detail

TaskList

public TaskList()
Method Detail

reset

public void reset()
Public for testing.


addTask

public void addTask(ITask task)

addTask

public void addTask(ITask task,
                    AbstractTaskContainer category)

refactorRepositoryUrl

public void refactorRepositoryUrl(java.lang.Object oldUrl,
                                  java.lang.String newUrl)

moveToRoot

public void moveToRoot(ITask task)

moveToContainer

public void moveToContainer(AbstractTaskContainer toContainer,
                            ITask task)

addCategory

public void addCategory(AbstractTaskContainer category)

removeFromCategory

public void removeFromCategory(TaskCategory category,
                               ITask task)

removeFromRoot

public void removeFromRoot(ITask task)

renameTask

public void renameTask(Task task,
                       java.lang.String description)

renameContainer

public void renameContainer(AbstractTaskContainer container,
                            java.lang.String newDescription)

addQuery

public void addQuery(AbstractRepositoryQuery query)

deleteTask

public void deleteTask(ITask task)
TODO: refactor around querying containers for their tasks Task is removed from all containers: root, archive, category, and tasks catchall (Currently no support for deletion of subtasks)


deleteCategory

public void deleteCategory(AbstractTaskContainer category)

deleteQuery

public void deleteQuery(AbstractRepositoryQuery query)

markComplete

public void markComplete(ITask task,
                         boolean complete)

addChangeListener

public void addChangeListener(ITaskListChangeListener listener)

removeChangeListener

public void removeChangeListener(ITaskListChangeListener listener)

internalAddCategory

public void internalAddCategory(AbstractTaskContainer cat)
NOTE: Only public so that other externalizers can use it


internalAddTask

public void internalAddTask(ITask task,
                            AbstractTaskContainer container)

internalAddRootTask

public void internalAddRootTask(ITask task)

internalAddQuery

public void internalAddQuery(AbstractRepositoryQuery query)

setActive

public void setActive(ITask task,
                      boolean active)

getActiveTasks

public java.util.List<ITask> getActiveTasks()

getActiveTask

public ITask getActiveTask()
HACK: returns first

Returns:

getRootTasks

public java.util.Set<ITask> getRootTasks()

getCategories

public java.util.Set<AbstractTaskContainer> getCategories()

getUserCategories

public java.util.List<AbstractTaskContainer> getUserCategories()

getQueries

public java.util.Set<AbstractRepositoryQuery> getQueries()

getRootElements

public java.util.Set<ITaskListElement> getRootElements()

getAllTasks

public java.util.Collection<ITask> getAllTasks()

getTaskContainers

public java.util.Set<AbstractTaskContainer> getTaskContainers()

getQueryForHandle

public AbstractRepositoryQuery getQueryForHandle(java.lang.String handle)

isEmpty

public boolean isEmpty()

getTask

public ITask getTask(java.lang.String handleIdentifier)

getContainerForHandle

public AbstractTaskContainer getContainerForHandle(java.lang.String categoryHandle)

getRootCategory

public TaskCategory getRootCategory()

getArchiveContainer

public TaskArchive getArchiveContainer()

getQueriesForHandle

public java.util.Set<AbstractRepositoryQuery> getQueriesForHandle(java.lang.String handle)
if handle == null or no queries found an empty set is returned *


getQueryHits

public java.util.Set<AbstractQueryHit> getQueryHits(java.util.Set<java.lang.String> handles)
if handle == null or no query hits found an empty set is returned *


getQueryHit

public AbstractQueryHit getQueryHit(java.lang.String handle)

getQueryHits

public java.util.Set<AbstractQueryHit> getQueryHits()
for testing


addQueryHit

public void addQueryHit(AbstractQueryHit hit)
called by AbstractRepositoryQuery


getRepositoryQueries

public java.util.Set<AbstractRepositoryQuery> getRepositoryQueries(java.lang.String repositoryUrl)
return all queries for the given repository url


getRepositoryTasks

public java.util.Set<AbstractRepositoryTask> getRepositoryTasks(java.lang.String repositoryUrl)
return all tasks for the given repository url


getChangeListeners

public java.util.List<ITaskListChangeListener> getChangeListeners()
Exposed for unit testing

Returns:
unmodifiable collection of ITaskActivityListeners

notifyLocalInfoChanged

public void notifyLocalInfoChanged(ITask task)
TODO: refactor into task deltas?


notifyRepositoryInfoChanged

public void notifyRepositoryInfoChanged(ITask task)

notifyContainerUpdated

public void notifyContainerUpdated(AbstractTaskContainer container)

getNextTaskNum

public int getNextTaskNum()

setLastTaskNum

public void setLastTaskNum(int lastTaskNum)

getLastTaskNum

public int getLastTaskNum()
For tasklist persistence. Use getNextTaskNum for task construction


findLargestTaskHandle

public int findLargestTaskHandle()
Note: use getNextTaskNum for new task construction


largestTaskHandleHelper

private int largestTaskHandleHelper(java.util.Collection<ITask> tasks)

removeOrphanedHits

public void removeOrphanedHits()
Orphaned hits arise when no query in the tasklist references a hit in the master list maintained by the tasklist. Orphaned hits don't span workbench re-start but this just helps maintain the list in case of prolonged workbench uptime.