blob: 8dad0ca75bbfdc42624a2f789c584b7c3ac37b8f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Tasktop Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tasktop Technologies - initial API and implementation
* Ken Sueda - original prototype
*******************************************************************************/
package org.eclipse.mylyn.internal.sandbox.ui.planner;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.DateRange;
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.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
import org.eclipse.ui.part.EditorPart;
/**
* Note: Some methods have been generalized to remove duplicate code but the design still isn't right (long parameter
* lists, inflexible table creation). Needs refactoring. (Planned tasks section is currently disabled but should also
* use the new common methods)
*
* @author Mik Kersten
* @author Wesley Coelho (added tasks in progress section, refactored-out similar code)
*/
public class TaskActivityEditorPart extends EditorPart {
private static final String LABEL_PLANNED_ACTIVITY = "Planned Activity";
private static final String LABEL_DIALOG = "Summary";
private static final String LABEL_PAST_ACTIVITY = "Past Activity";
private TaskActivityEditorInput editorInput = null;
private final String[] activityColumnNames = new String[] { " ", " !", "Description", "Elapsed", "Estimated",
"Created", "Completed" };
private final int[] activityColumnWidths = new int[] { 100, 30, 200, 70, 70, 90, 90 };
private final int[] activitySortConstants = new int[] { TaskActivitySorter.ICON, TaskActivitySorter.PRIORITY,
TaskActivitySorter.DESCRIPTION, TaskActivitySorter.DURATION, TaskActivitySorter.ESTIMATED,
TaskActivitySorter.CREATION_DATE, TaskActivitySorter.COMPLETED_DATE };
// private String[] planColumnNames = new String[] { " ", " !", "Description", "Elapsed", "Estimated", "Reminder" };
//
// private int[] planSortConstants = new int[] { TaskPlanSorter.ICON, TaskPlanSorter.PRIORITY,
// TaskPlanSorter.DESCRIPTION, TaskPlanSorter.DURATION, TaskPlanSorter.ESTIMATED, TaskPlanSorter.REMINDER };
//
// private int[] planColumnWidths = new int[] { 100, 30, 200, 90, 90, 100 };
private static final String LABEL_ESTIMATED = "Total estimated time: ";
private static final String NO_TIME_ELAPSED = " ";
private static final String BLANK_CELL = " ";
private Label totalEstimatedHoursLabel;
private Label numberCompleted;
private Label totalTimeOnCompleted;
private Label numberInProgress;
private Label totalTimeOnIncomplete;
private Label totalEstimatedTime;
private Label totalTime;
private TaskActivityContentProvider activityContentProvider;
private PlannedTasksContentProvider planContentProvider;
@Override
public void doSave(IProgressMonitor monitor) {
}
@Override
public void doSaveAs() {
}
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
setSite(site);
setInput(input);
editorInput = (TaskActivityEditorInput) input;
setPartName(editorInput.getName());
setTitleToolTip(editorInput.getToolTipText());
}
@Override
public boolean isDirty() {
return false;
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
@Override
public void createPartControl(Composite parent) {
FormToolkit toolkit = new FormToolkit(parent.getDisplay());
ScrolledForm sform = toolkit.createScrolledForm(parent);
Composite editorComposite = sform.getBody();
editorComposite.setLayout(new GridLayout());
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL_BOTH;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
editorComposite.setLayoutData(gridData);
createSummarySection(editorComposite, toolkit, editorInput.getReportStartDate(), editorInput.getReportEndDate());
String label = LABEL_PAST_ACTIVITY;
List<ITask> allTasks = new ArrayList<ITask>();
allTasks.addAll(editorInput.getCompletedTasks());
allTasks.addAll(editorInput.getInProgressTasks());
SashForm sashForm = new SashForm(editorComposite, SWT.VERTICAL);
sashForm.setLayout(new GridLayout());
sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
activityContentProvider = new TaskActivityContentProvider(editorInput);
final TreeViewer activityViewer = createTableSection(sashForm, toolkit, label, activityColumnNames,
activityColumnWidths, activitySortConstants);
activityViewer.setContentProvider(activityContentProvider);
activityViewer.setLabelProvider(new TaskPlannerLabelProvider(activityViewer, editorInput.getReportStartDate(),
editorInput.getReportEndDate()));
setSorters(activityColumnNames, activitySortConstants, activityViewer.getTree(), activityViewer, false);
activityViewer.setInput(editorInput);
activityViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
updateLabels();
}
});
MenuManager activityContextMenuMgr = new MenuManager("#ActivityPlannerPopupMenu");
activityContextMenuMgr.setRemoveAllWhenShown(true);
activityContextMenuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
TaskActivityEditorPart.this.fillContextMenu(activityViewer, manager);
}
});
Menu menu = activityContextMenuMgr.createContextMenu(activityViewer.getControl());
activityViewer.getControl().setMenu(menu);
getSite().registerContextMenu(activityContextMenuMgr, activityViewer);
planContentProvider = new PlannedTasksContentProvider(editorInput);
final TreeViewer planViewer = createTableSection(sashForm, toolkit, LABEL_PLANNED_ACTIVITY,
activityColumnNames, activityColumnWidths, activitySortConstants);
planViewer.setContentProvider(planContentProvider);
planViewer.setLabelProvider(new TaskPlannerLabelProvider(planViewer, editorInput.getReportStartDate(),
editorInput.getReportEndDate()));
// planViewer.setLabelProvider(new TaskPlanLabelProvider());
// createPlanCellEditorListener(planViewer.getTable(), planViewer);
// planViewer.setCellModifier(new PlannedTasksCellModifier(planViewer));
// initDrop(planViewer, planContentProvider);
setSorters(activityColumnNames, activitySortConstants, planViewer.getTree(), planViewer, true);
planViewer.setInput(editorInput);
// planViewer.addSelectionChangedListener(new
// ISelectionChangedListener() {
// public void selectionChanged(SelectionChangedEvent event) {
// updateLabels();
// }
// });
// MenuManager planContextMenuMgr = new
// MenuManager("#PlanPlannerPopupMenu");
// planContextMenuMgr.setRemoveAllWhenShown(true);
// planContextMenuMgr.addMenuListener(new IMenuListener() {
// public void menuAboutToShow(IMenuManager manager) {
// TaskActivityEditorPart.this.fillContextMenu(planViewer, manager);
// }
// });
// Menu planMenu =
// planContextMenuMgr.createContextMenu(planViewer.getControl());
// planViewer.getControl().setMenu(planMenu);
// getSite().registerContextMenu(planContextMenuMgr, planViewer);
totalEstimatedHoursLabel = toolkit.createLabel(editorComposite, LABEL_ESTIMATED + "0 hours ", SWT.NULL);
createButtons(editorComposite, toolkit, planViewer, planContentProvider);
updateLabels();
}
private void fillContextMenu(TreeViewer viewer, IMenuManager manager) {
if (!viewer.getSelection().isEmpty()) {
manager.add(new OpenTaskEditorAction(viewer));
manager.add(new RemoveTaskAction(viewer));
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
} else {
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
}
@Override
public void setFocus() {
}
private void createSummarySection(Composite parent, FormToolkit toolkit, Date startDate, Date endDate) {
Section summarySection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR);
summarySection.setText(LABEL_DIALOG);
summarySection.setLayout(new GridLayout());
summarySection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Composite summaryContainer = toolkit.createComposite(summarySection);
summarySection.setClient(summaryContainer);
TableWrapLayout layout = new TableWrapLayout();
layout.numColumns = 2;
summaryContainer.setLayout(layout);
String formatString = "yyyy-MM-dd, h:mm a";
SimpleDateFormat formater = new SimpleDateFormat(formatString, Locale.ENGLISH);
if (startDate != null) {
String dateLabel = "Date start: " + formater.format(startDate);
toolkit.createLabel(summaryContainer, dateLabel, SWT.NULL);
}
if (endDate != null) {
String dateLabel = "Date end: " + formater.format(endDate);
toolkit.createLabel(summaryContainer, dateLabel, SWT.NULL);
}
String numComplete = "Number completed: " + editorInput.getCompletedTasks().size();
numberCompleted = toolkit.createLabel(summaryContainer, numComplete, SWT.NULL);
// numberCompleted.setForeground(toolkit.getColors().getColor(FormColors.TITLE));
String totalCompletedTaskTime = "Total time on completed: "
+ TasksUiInternal.getFormattedDuration(editorInput.getTotalTimeSpentOnCompletedTasks(), false);
totalTimeOnCompleted = toolkit.createLabel(summaryContainer, totalCompletedTaskTime, SWT.NULL);
// totalTimeOnCompleted.setForeground(toolkit.getColors().getColor(FormColors.TITLE));
String numInProgress = "Number in progress: " + editorInput.getInProgressTasks().size();
numberInProgress = toolkit.createLabel(summaryContainer, numInProgress, SWT.NULL);
// numberInProgress.setForeground(toolkit.getColors().getColor(FormColors.TITLE));
String totalInProgressTaskTime = "Total time on incomplete: "
+ TasksUiInternal.getFormattedDuration(editorInput.getTotalTimeSpentOnInProgressTasks(), false);
totalTimeOnIncomplete = toolkit.createLabel(summaryContainer, totalInProgressTaskTime, SWT.NULL);
// totalTimeOnIncomplete.setForeground(toolkit.getColors().getColor(FormColors.TITLE));
String spacer = " ";
String totalEstimated = "Total estimated time: " + editorInput.getTotalTimeEstimated() + " hours" + spacer;
totalEstimatedTime = toolkit.createLabel(summaryContainer, totalEstimated, SWT.NULL);
// totalEstimatedTime.setForeground(toolkit.getColors().getColor(FormColors.TITLE));
String grandTotalTime = "Total time: " + getTotalTime();
totalTime = toolkit.createLabel(summaryContainer, grandTotalTime, SWT.NULL);
// totalTime.setForeground(toolkit.getColors().getColor(FormColors.TITLE));
}
private void updateSummarySection() {
String numComplete = "Number completed: " + editorInput.getCompletedTasks().size();
numberCompleted.setText(numComplete);
String totalCompletedTaskTime = "Total time on completed: "
+ TasksUiInternal.getFormattedDuration(editorInput.getTotalTimeSpentOnCompletedTasks(), false);
totalTimeOnCompleted.setText(totalCompletedTaskTime);
String numInProgress = "Number in progress: " + editorInput.getInProgressTasks().size();
numberInProgress.setText(numInProgress);
String totalInProgressTaskTime = "Total time on incomplete: "
+ TasksUiInternal.getFormattedDuration(editorInput.getTotalTimeSpentOnInProgressTasks(), false);
totalTimeOnIncomplete.setText(totalInProgressTaskTime);
String spacer = " ";
String totalEstimated = "Total estimated time: " + editorInput.getTotalTimeEstimated() + " hours" + spacer;
totalEstimatedTime.setText(totalEstimated);
String grandTotalTime = "Total time: " + getTotalTime();
totalTime.setText(grandTotalTime);
}
// private void createPlanCellEditorListener(final Table planTable, final
// TableViewer planTableViewer) {
// CellEditor[] editors = new CellEditor[planColumnNames.length + 1];
// final ComboBoxCellEditor estimateEditor = new
// ComboBoxCellEditor(planTable, TaskListManager.ESTIMATE_TIMES,
// SWT.READ_ONLY);
// final ReminderCellEditor reminderEditor = new
// ReminderCellEditor(planTable);
// editors[0] = null; // not used
// editors[1] = null;// not used
// editors[2] = null;// not used
// editors[3] = null;// not used
// editors[4] = estimateEditor;
// editors[5] = reminderEditor;
// reminderEditor.addListener(new ICellEditorListener() {
// public void applyEditorValue() {
// Object selection = ((IStructuredSelection)
// planTableViewer.getSelection()).getFirstElement();
// if (selection instanceof ITask) {
// ((ITask) selection).setReminderDate(reminderEditor.getReminderDate());
// planTableViewer.refresh();
// }
// }
//
// public void cancelEditor() {
// }
//
// public void editorValueChanged(boolean oldValidState, boolean
// newValidState) {
// }
//
// });
// estimateEditor.addListener(new ICellEditorListener() {
// public void applyEditorValue() {
// Object selection = ((IStructuredSelection)
// planTableViewer.getSelection()).getFirstElement();
// if (selection instanceof ITask) {
// ITask task = (ITask) selection;
// int estimate = (Integer) estimateEditor.getValue();
// if (estimate == -1) {
// estimate = 0;
// }
// task.setEstimatedTimeHours(estimate);
// updateLabels();
// planTableViewer.refresh();
// }
// }
//
// public void cancelEditor() {
// }
//
// public void editorValueChanged(boolean oldValidState, boolean
// newValidState) {
// }
//
// });
// planTableViewer.setCellEditors(editors);
// }
private String getTotalTime() {
return TasksUiInternal.getFormattedDuration(
editorInput.getTotalTimeSpentOnCompletedTasks() + editorInput.getTotalTimeSpentOnInProgressTasks(),
false);
}
private TreeViewer createTableSection(Composite parent, FormToolkit toolkit, String title, String[] columnNames,
int[] columnWidths, int[] sortConstants) {
Section tableSection = toolkit.createSection(parent, ExpandableComposite.TITLE_BAR); // |
// ExpandableComposite.TWISTIE
tableSection.setText(title);
// tableSection.setExpanded(true);
tableSection.marginHeight = 8;
tableSection.setLayout(new GridLayout());
tableSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Composite detailContainer = toolkit.createComposite(tableSection);
tableSection.setClient(detailContainer);
detailContainer.setLayout(new GridLayout());
detailContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
return createTable(detailContainer, toolkit, columnNames, columnWidths, sortConstants);
}
private TreeViewer createTable(Composite parent, FormToolkit toolkit, String[] columnNames, int[] columnWidths,
int[] sortConstants) {
int style = SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
Tree tree = toolkit.createTree(parent, style);
tree.setLayout(new GridLayout());
GridData tableGridData = new GridData(GridData.FILL_BOTH);
tableGridData.heightHint = 100;
tree.setLayoutData(tableGridData);
tree.setLinesVisible(true);
tree.setHeaderVisible(true);
tree.setEnabled(true);
for (int i = 0; i < columnNames.length; i++) {
TreeColumn column = new TreeColumn(tree, SWT.LEFT, i);
column.setText(columnNames[i]);
column.setWidth(columnWidths[i]);
}
TreeViewer treeViewer = new TreeViewer(tree);
treeViewer.setUseHashlookup(true);
treeViewer.setColumnProperties(columnNames);
final OpenTaskEditorAction openAction = new OpenTaskEditorAction(treeViewer);
treeViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
openAction.run();
}
});
return treeViewer;
}
private void setSorters(String[] columnNames, int[] sortConstants, Tree tree, TreeViewer treeViewer, boolean plan) {
for (int i = 0; i < columnNames.length; i++) {
TreeColumn column = tree.getColumn(i);
addColumnSelectionListener(treeViewer, column, sortConstants[i], plan);
}
}
private void addColumnSelectionListener(final TreeViewer tableViewer, TreeColumn column, final int sorterConstant,
final boolean plan) {
column.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// if (plan) { // TODO: bad modularity
// tableViewer.setSorter(new TaskPlanSorter(sorterConstant));
// } else {
// tableViewer.setSorter(new TaskActivitySorter(sorterConstant));
// }
}
});
}
private void createButtons(Composite parent, FormToolkit toolkit, final TreeViewer viewer,
final PlannedTasksContentProvider contentProvider) {
Composite container = new Composite(parent, SWT.NULL);
container.setBackground(parent.getBackground());
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 3;
// Button addIncomplete = toolkit.createButton(container, "Add
// Incomplete", SWT.PUSH | SWT.CENTER);
// addIncomplete.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent e) {
// Set<ITask> incompleteTasks = editorInput.getInProgressTasks();
// for (ITask task : incompleteTasks) {
// contentProvider.addTask(task);
// viewer.refresh();
// updateLabels();
// }
// }
// });
//
// Button addToCategory = toolkit.createButton(container, "Add Planned
// to Category...", SWT.PUSH | SWT.CENTER);
// addToCategory.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent e) {
// addPlannedTasksToCategory(contentProvider);
// }
// });
Button exportToHTML = toolkit.createButton(container, "Export to HTML...", SWT.PUSH | SWT.CENTER);
exportToHTML.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
exportToHtml();
}
});
}
private void updateLabels() {
totalEstimatedHoursLabel.setText(LABEL_ESTIMATED + editorInput.getPlannedEstimate() + " hours");
updateSummarySection();
}
private void exportToHtml() {
File outputFile;
try {
FileDialog dialog = new FileDialog(getSite().getWorkbenchWindow().getShell());
dialog.setText("Specify a file name");
dialog.setFilterExtensions(new String[] { "*.html", "*.*" });
String filename = dialog.open();
if (filename == null || filename.equals("")) {
return;
}
if (!filename.endsWith(".html")) {
filename += ".html";
}
outputFile = new File(filename);
// outputStream = new FileOutputStream(outputFile, true);
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
writer.write("<html><head></head><body>");
exportSummarySection(writer);
exportActivitySection(writer);
exportPlanSection(writer);
writer.write("</body></html>");
writer.close();
} catch (IOException e) {
StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not write to file", e));
}
}
private void exportPlanSection(BufferedWriter writer) throws IOException {
writer.write("<H2>" + LABEL_PLANNED_ACTIVITY + "</H2>");
writer.write("<table border=\"1\" width=\"100%\" id=\"plannedActivityTable\">");
writer.write("<tr>");
writer.write("<td width=\"59\"><b>Type</b></td><td width=\"55\"><b>Priority</b></td><td width=\"495\"><b>Description</b></td>");
writer.write("<td><b>Elapsed</b></td><td><b>Estimated</b></td><td><b>Reminder</b></td>");
writer.write("</tr>");
for (Object element : planContentProvider.getElements(null)) {
if (element instanceof ITask) {
AbstractTask currentTask = (AbstractTask) element;
String formatString = "dd-MM-yyyy";
SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH);
String elapsedTimeString = TasksUiInternal.getFormattedDuration(TasksUiPlugin.getTaskActivityManager()
.getElapsedTime(currentTask), false);
String estimatedTimeString = currentTask.getEstimatedTimeHours() + " hours";
if (elapsedTimeString.equals("")) {
elapsedTimeString = BLANK_CELL;
}
DateRange reminderDate = currentTask.getScheduledForDate();
String reminderDateString = BLANK_CELL;
if (reminderDate != null) {
reminderDateString = format.format(reminderDate);
}
writer.write("<tr>");
writer.write("<td width=\"59\">ICON</td><td width=\"55\">" + currentTask.getPriority()
+ "</td><td width=\"495\">");
if (TasksUiInternal.isValidUrl(currentTask.getUrl())) {
writer.write("<a href='" + currentTask.getUrl() + "'>" + currentTask.getSummary() + "</a>");
} else {
writer.write(currentTask.getSummary());
}
writer.write("</td><td>" + elapsedTimeString + "</td><td>" + estimatedTimeString + "</td><td>"
+ reminderDateString + "</td>");
writer.write("</tr>");
}
}
writer.write("</table>");
writer.write("<BR></BR>");
writer.write("<H3>" + totalEstimatedHoursLabel.getText() + "</H3>");
}
private void exportActivitySection(BufferedWriter writer) throws IOException {
writer.write("<H2>" + LABEL_PAST_ACTIVITY + "</H2>");
writer.write("<table border=\"1\" width=\"100%\" id=\"activityTable\">");
writer.write("<tr>");
writer.write("<td width=\"59\"><b>Type</b></td><td width=\"55\"><b>Priority</b></td><td width=\"495\"><b>Description</b></td>");
writer.write("<td><b>Created</b></td><td><b>Completed</b></td><td><b>Elapsed</b></td><td><b>Estimated</b></td>");
writer.write("</tr>");
for (Object element : activityContentProvider.getElements(null)) {
if (element instanceof ITask) {
AbstractTask currentTask = (AbstractTask) element;
String formatString = "dd-MM-yyyy";
SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH);
String elapsedTimeString = TasksUiInternal.getFormattedDuration(TasksUiPlugin.getTaskActivityManager()
.getElapsedTime(currentTask), false);
String estimatedTimeString = currentTask.getEstimatedTimeHours() + " hours";
if (elapsedTimeString.equals("")) {
elapsedTimeString = NO_TIME_ELAPSED;
}
Date creationDate = currentTask.getCreationDate();
String creationDateString = BLANK_CELL;
if (creationDate != null) {
creationDateString = format.format(creationDate);
}
String completionDateString = BLANK_CELL;
Date completedDate = currentTask.getCompletionDate();
if (completedDate != null) {
completionDateString = format.format(completedDate);
}
writer.write("<tr>");
writer.write("<td width=\"59\">ICON</td><td width=\"55\">" + currentTask.getPriority()
+ "</td><td width=\"495\">");
if (TasksUiInternal.isValidUrl(currentTask.getUrl())) {
writer.write("<a href='" + currentTask.getUrl() + "'>" + currentTask.getSummary() + "</a>");
} else {
writer.write(currentTask.getSummary());
}
writer.write("</td><td>" + creationDateString + "</td>");
writer.write("<td>" + completionDateString + "</td><td>" + elapsedTimeString + "</td><td>"
+ estimatedTimeString + "</td>");
writer.write("</tr>");
}
}
writer.write("</table>");
}
private void exportSummarySection(BufferedWriter writer) throws IOException {
Date startDate = editorInput.getReportStartDate();
Date endDate = editorInput.getReportEndDate();
writer.write("<H2>" + LABEL_DIALOG + "</H2>");
String formatString = "yyyy-MM-dd, h:mm a";
SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.ENGLISH);
writer.write("<table border=\"0\" width=\"75%\" id=\"table1\">\n<tr>\n");
writer.write("<td width=\"138\">Date start:</td> ");
String dateLabel = "Not Available";
if (startDate != null) {
dateLabel = format.format(startDate);
}
writer.write("<td>" + dateLabel + "</td>");
writer.write("<td width=\"138\">Date end:</td> ");
String endLabel = "Not Available";
if (endDate != null) {
endLabel = format.format(endDate);
}
writer.write("<td>" + endLabel + "</td>");
//writer.write("<td width=\"169\">&nbsp;</td></tr>");
writer.write("<tr><td width=\"138\">Number Completed:</td><td>" + editorInput.getCompletedTasks().size()
+ "</td>");
writer.write("<td width=\"169\">Total time on completed:</td><td width=\"376\">"
+ TasksUiInternal.getFormattedDuration(editorInput.getTotalTimeSpentOnCompletedTasks(), false)
+ "</td>");
writer.write("</tr>");
writer.write("<tr><td width=\"138\">Number in Progress:</td><td>" + editorInput.getInProgressTasks().size()
+ "</td>");
writer.write("<td width=\"169\">Total time on incompleted:</td><td width=\"376\">"
+ TasksUiInternal.getFormattedDuration(editorInput.getTotalTimeSpentOnInProgressTasks(), false)
+ "</td>");
writer.write("</tr>");
writer.write("<tr><td width=\"138\">Outstanding estimated hours:</td><td>"
+ editorInput.getTotalTimeEstimated() + "</td>");
writer.write("<td width=\"169\">Total time:</td><td width=\"376\">" + getTotalTime() + "</td>");
writer.write("</tr>");
writer.write("</table>");
}
}