package net.certware.history.tasks.handlers; import java.util.Collection; import java.util.Iterator; import net.certware.core.ui.log.CertWareLog; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.TaskList; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.ui.ISelectionService; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; /** * Dump task command handler. * @author mrb * @since 2.0.0 */ @SuppressWarnings("restriction") public class DumpTaskListHandler extends AbstractHandler { /** dialog title */ private static final String TITLE = "Task List Computation"; protected IWorkbenchPart activePart = null; /** * Handles the dump task category command request. * Presumes the command came from a popup menu selection of model object. * @param event used to find file * @return always returns null * @throws ExecutionException if open fails * @see org.eclipse.core.commands.IHandler#execute(ExecutionEvent) */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { try { // fetch workbench context activePart = HandlerUtil.getActivePartChecked(event); IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); ISelectionService service = window.getSelectionService(); IStructuredSelection iss = (IStructuredSelection)service.getSelection(); for (Iterator<?> iterator = iss.iterator(); iterator.hasNext();) { process((IProject)iterator.next()); } } catch (ExecutionException e) { CertWareLog.logError("Dump task category", e); } return null; } /** * Process the selected project. * @param selectedProject */ protected void process(IProject selectedProject) { if ( selectedProject.isOpen() == false ) { CertWareLog.logWarning(String.format("%s:%s","Skipped task list processing for closed project", selectedProject.getName())); return; } // TODO tests of task access // TasksUi.getRepositoryModel().getTask(arg0); // TasksUi.getTaskDataManager(); // Set<ITask> dueTasks = TasksUi.getTaskActivityManager().getAllDueTasks(); // IRepositoryQuery q = TasksUi.getRepositoryModel().createRepositoryQuery(TasksUiUtil.getSelectedRepository()); // there is no project-related identification in the task list // we use the selected project as a container for a generated file TaskList taskList = TasksUiPlugin.getTaskList(); Collection<AbstractTask> tasks = taskList.getAllTasks(); int uncompletedHours = 0; int completedHours = 0; if ( tasks == null || tasks.size() < 1 ) { MessageDialog.openWarning(activePart.getSite().getShell(), TITLE, "No tasks found in task list."); return; } // process the task collection for (AbstractTask at : tasks ) { System.err.println("task: " + at.toString()); System.err.println("priority " + at.getPriority()); System.err.println("kind " + at.getTaskKind()); System.err.println("key " + at.getTaskKey()); System.err.println("creation date " + at.getCreationDate()); System.err.println("completion date " + at.getCompletionDate()); System.err.println("estimated time hours " + at.getEstimatedTimeHours()); System.err.println("completed? " + at.isCompleted()); // primitive accumulators if ( at.isCompleted() ) { completedHours += at.getEstimatedTimeHours(); } else { uncompletedHours += at.getEstimatedTimeHours(); } Collection<ITask> children = at.getChildren(); for ( ITask c : children ) { System.err.println("child: " + at.toString()); System.err.println("child summary " + c.getSummary()); System.err.println("child priority " + c.getPriority()); System.err.println("child kind " + c.getTaskKind()); System.err.println("child key " + c.getTaskKey()); System.err.println("child creation date " + c.getCreationDate()); System.err.println("child completion date " + c.getCompletionDate()); System.err.println("child completed? " + c.isCompleted()); } } // report to log CertWareLog.logInfo(String.format("%s %s","Processed task list within project",selectedProject.getName())); // report to dialog StringBuffer sb = new StringBuffer(); sb.append(String.format("%s %d","Task count:",tasks.size())).append('\n'); sb.append(String.format("%s %d hrs", "Total completed hours:", completedHours)).append('\n'); sb.append(String.format("%s %d hrs", "Total uncompleted hours:", uncompletedHours )).append('\n'); MessageDialog.openInformation(activePart.getSite().getShell(),TITLE,sb.toString()); } }