diff options
author | spingel | 2008-04-30 07:56:37 +0000 |
---|---|---|
committer | spingel | 2008-04-30 07:56:37 +0000 |
commit | c0aa373c167edecdf41cf1e95d9d28c0ac668393 (patch) | |
tree | aa5b7f86d579e775782d936644fdc95cda1347a2 /org.eclipse.mylyn.tasks.ui | |
parent | 44e0192aa29ef8fafcd81e2f4b01d04b176aba8c (diff) | |
download | org.eclipse.mylyn.tasks-c0aa373c167edecdf41cf1e95d9d28c0ac668393.tar.gz org.eclipse.mylyn.tasks-c0aa373c167edecdf41cf1e95d9d28c0ac668393.tar.xz org.eclipse.mylyn.tasks-c0aa373c167edecdf41cf1e95d9d28c0ac668393.zip |
NEW - bug 212700: [api] support refreshing of attributes for new tasks
https://bugs.eclipse.org/bugs/show_bug.cgi?id=212700
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
6 files changed, 556 insertions, 425 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksJobFactory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksJobFactory.java index 275dbfa0b..6ce4e7e5e 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksJobFactory.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksJobFactory.java @@ -34,6 +34,7 @@ import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskData; import org.eclipse.mylyn.tasks.core.sync.SubmitJob; import org.eclipse.mylyn.tasks.core.sync.SynchronizationJob; +import org.eclipse.mylyn.tasks.core.sync.TaskJob; import org.eclipse.ui.progress.IProgressConstants; /** @@ -103,4 +104,38 @@ public class TasksJobFactory implements ITaskJobFactory { return job; } + public TaskJob createUpdateRepositoryConfigurationJob(final AbstractRepositoryConnector connector, + final TaskRepository taskRepository) { + TaskJob updateJob = new TaskJob("Refreshing repository configuration") { + private IStatus error; + + @Override + protected IStatus run(IProgressMonitor monitor) { + monitor.beginTask("Receiving configuration", IProgressMonitor.UNKNOWN); + try { + try { + connector.updateRepositoryConfiguration(taskRepository, monitor); + } catch (CoreException e) { + error = e.getStatus(); + } + } finally { + monitor.done(); + } + return Status.OK_STATUS; + } + + @Override + public boolean belongsTo(Object family) { + return family == taskRepository; + } + + @Override + public IStatus getError() { + return error; + } + }; + updateJob.setPriority(Job.INTERACTIVE); + return updateJob; + } + } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorAttributePart.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorAttributePart.java index ca0a97c38..570c6058a 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorAttributePart.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorAttributePart.java @@ -14,19 +14,18 @@ import java.util.Comparator; import java.util.List; import java.util.Map; -import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages; import org.eclipse.mylyn.internal.tasks.ui.views.UpdateRepositoryConfigurationAction; -import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; -import org.eclipse.mylyn.tasks.core.AbstractTask; -import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper; import org.eclipse.mylyn.tasks.core.data.TaskAttributeProperties; +import org.eclipse.mylyn.tasks.core.sync.TaskJob; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor; import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPart; @@ -162,28 +161,55 @@ public class TaskEditorAttributePart extends AbstractTaskEditorPart { protected void fillToolBar(ToolBarManager toolBar) { UpdateRepositoryConfigurationAction repositoryConfigRefresh = new UpdateRepositoryConfigurationAction() { @Override - public void performUpdate(TaskRepository repository, AbstractRepositoryConnector connector, - IProgressMonitor monitor) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - getTaskEditorPage().showEditorBusy(true); + public void run() { + getTaskEditorPage().showEditorBusy(true); + final TaskJob job = TasksUi.getJobFactory().createUpdateRepositoryConfigurationJob( + getTaskEditorPage().getConnector(), getTaskEditorPage().getTaskRepository()); + job.addJobChangeListener(new JobChangeAdapter() { + @Override + public void done(IJobChangeEvent event) { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + getTaskEditorPage().showEditorBusy(false); + if (job.getError() != null) { + getTaskEditorPage().getTaskEditor().setStatus( + "Updating of repository configuration failed", "Update Failed", + job.getError()); + } else { + getTaskEditorPage().refreshFormContent(); + } + } + }); } }); - try { - super.performUpdate(repository, connector, monitor); - AbstractTask task = getTaskEditorPage().getTask(); - Job job = TasksUi.synchronizeTask(connector, task, true, null); - job.join(); - } catch (InterruptedException e) { - // ignore - } finally { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - getTaskEditorPage().refreshFormContent(); - } - }); - } - } + job.setUser(true); + job.setPriority(Job.INTERACTIVE); + job.schedule(); + }; + +// @Override +// public void performUpdate(TaskRepository repository, AbstractRepositoryConnector connector, +// IProgressMonitor monitor) { +// PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { +// public void run() { +// getTaskEditorPage().showEditorBusy(true); +// } +// }); +// try { +// super.performUpdate(repository, connector, monitor); +// AbstractTask task = getTaskEditorPage().getTask(); +// Job job = TasksUi.synchronizeTask(connector, task, true, null); +// job.join(); +// } catch (InterruptedException e) { +// // ignore +// } finally { +// PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { +// public void run() { +// getTaskEditorPage().refreshFormContent(); +// } +// }); +// } +// } }; repositoryConfigRefresh.setImageDescriptor(TasksUiImages.REPOSITORY_SYNCHRONIZE); repositoryConfigRefresh.selectionChanged(new StructuredSelection(getTaskEditorPage().getTaskRepository())); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java index fcec15ebb..fa7df072f 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java @@ -11,7 +11,9 @@ package org.eclipse.mylyn.internal.tasks.ui.util; import java.util.ArrayList; import java.util.List; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.ProgressMonitorWrapper; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.JobChangeAdapter; @@ -46,6 +48,87 @@ import org.eclipse.ui.PlatformUI; public class TasksUiInternal { + public static MultiRepositoryAwareWizard createNewTaskWizard(TaskSelection taskSelection) { + return new NewTaskWizard(taskSelection); + } + + public static List<TaskEditor> getActiveRepositoryTaskEditors() { + List<TaskEditor> repositoryTaskEditors = new ArrayList<TaskEditor>(); + IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); + for (IWorkbenchWindow window : windows) { + IEditorReference[] editorReferences = window.getActivePage().getEditorReferences(); + for (IEditorReference editorReference : editorReferences) { + try { + if (editorReference.getEditorInput() instanceof TaskEditorInput) { + TaskEditorInput input = (TaskEditorInput) editorReference.getEditorInput(); + if (input.getTask() != null) { + IEditorPart editorPart = editorReference.getEditor(false); + if (editorPart instanceof TaskEditor) { + repositoryTaskEditors.add((TaskEditor) editorPart); + } + } + } + } catch (PartInitException e) { + // ignore + } + } + } + return repositoryTaskEditors; + } + + public static IProgressMonitor getUiMonitor(IProgressMonitor monitor) { + return new ProgressMonitorWrapper(monitor) { + @Override + public void beginTask(final String name, final int totalWork) { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + getWrappedProgressMonitor().beginTask(name, totalWork); + } + }); + } + + @Override + public void done() { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + getWrappedProgressMonitor().done(); + } + }); + } + + @Override + public void subTask(final String name) { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + getWrappedProgressMonitor().subTask(name); + } + }); + } + + @Override + public void worked(final int work) { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + getWrappedProgressMonitor().worked(work); + } + }); + } + }; + } + + public static void openEditor(TaskCategory category) { + final IEditorInput input = new CategoryEditorInput(category); + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if (window != null) { + IWorkbenchPage page = window.getActivePage(); + TasksUiUtil.openEditor(input, CategoryEditor.ID_EDITOR, page); + } + } + }); + } + // API 3.0 move to internal class? public static void refreshAndOpenTaskListElement(AbstractTaskContainer element) { if (element instanceof AbstractTask || element instanceof ScheduledTaskDelegate) { @@ -106,46 +189,4 @@ public class TasksUiInternal { connectorUi.openEditQueryDialog(query); } } - - public static void openEditor(TaskCategory category) { - final IEditorInput input = new CategoryEditorInput(category); - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window != null) { - IWorkbenchPage page = window.getActivePage(); - TasksUiUtil.openEditor(input, CategoryEditor.ID_EDITOR, page); - } - } - }); - } - - public static List<TaskEditor> getActiveRepositoryTaskEditors() { - List<TaskEditor> repositoryTaskEditors = new ArrayList<TaskEditor>(); - IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); - for (IWorkbenchWindow window : windows) { - IEditorReference[] editorReferences = window.getActivePage().getEditorReferences(); - for (IEditorReference editorReference : editorReferences) { - try { - if (editorReference.getEditorInput() instanceof TaskEditorInput) { - TaskEditorInput input = (TaskEditorInput) editorReference.getEditorInput(); - if (input.getTask() != null) { - IEditorPart editorPart = editorReference.getEditor(false); - if (editorPart instanceof TaskEditor) { - repositoryTaskEditors.add((TaskEditor) editorPart); - } - } - } - } catch (PartInitException e) { - // ignore - } - } - } - return repositoryTaskEditors; - } - - public static MultiRepositoryAwareWizard createNewTaskWizard(TaskSelection taskSelection) { - return new NewTaskWizard(taskSelection); - } - } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUi.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUi.java index ece8ae230..9d318a3dd 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUi.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUi.java @@ -24,13 +24,14 @@ import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; import org.eclipse.mylyn.tasks.core.AbstractTask; +import org.eclipse.mylyn.tasks.core.ITaskJobFactory; import org.eclipse.mylyn.tasks.core.ITaskList; import org.eclipse.mylyn.tasks.core.ITaskListManager; import org.eclipse.mylyn.tasks.core.ITaskRepositoryManager; -import org.eclipse.mylyn.tasks.core.ITaskJobFactory; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.ITaskDataManager; import org.eclipse.mylyn.tasks.core.sync.SynchronizationJob; +import org.eclipse.mylyn.tasks.core.sync.TaskJob; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; @@ -131,7 +132,7 @@ public class TasksUi { * you should call synchronize(Set<Set<AbstractTask> repositoryTasks, ...) * * @param listener - * can be null + * can be null */ public static Job synchronizeTask(AbstractRepositoryConnector connector, AbstractTask task, boolean force, IJobChangeListener listener) { @@ -140,7 +141,7 @@ public class TasksUi { /** * @param listener - * can be null + * can be null */ public static Job synchronizeTasks(AbstractRepositoryConnector connector, Set<AbstractTask> tasks, boolean force, IJobChangeListener listener) { @@ -180,4 +181,30 @@ public class TasksUi { return TasksUiPlugin.getRepositoryManager(); } + public static TaskJob updateRepositoryConfiguration(final TaskRepository taskRepository) { + synchronized (taskRepository) { + taskRepository.setUpdating(true); + } + + AbstractRepositoryConnector connector = getRepositoryManager().getRepositoryConnector( + taskRepository.getConnectorKind()); + final TaskJob job = getJobFactory().createUpdateRepositoryConfigurationJob(connector, taskRepository); + job.addJobChangeListener(new JobChangeAdapter() { + @Override + public void done(IJobChangeEvent event) { + synchronized (taskRepository) { + taskRepository.setUpdating(false); + } + if (job.getError() != null) { + Display display = PlatformUI.getWorkbench().getDisplay(); + if (!display.isDisposed()) { + StatusHandler.displayStatus("Configuration Refresh Failed", job.getError()); + } + } + } + }); + job.schedule(); + return job; + } + } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java index 12482ae12..4f0e655f1 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java @@ -251,7 +251,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { public void run() { if (task.getSynchronizationState() == SynchronizationState.INCOMING || task.getSynchronizationState() == SynchronizationState.CONFLICT) { - getParentEditor().setMessage("Task has incoming changes", IMessageProvider.WARNING, + getTaskEditor().setMessage("Task has incoming changes", IMessageProvider.WARNING, new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent e) { @@ -309,8 +309,8 @@ public abstract class AbstractTaskEditorPage extends FormPage { activeDisplay.asyncExec(new Runnable() { public void run() { if (getSite() != null && getSite().getPage() != null && !getManagedForm().getForm().isDisposed()) { - if (getParentEditor() != null) { - getSite().getPage().closeEditor(getParentEditor(), false); + if (getTaskEditor() != null) { + getSite().getPage().closeEditor(getTaskEditor(), false); } else { getSite().getPage().closeEditor(AbstractTaskEditorPage.this, false); } @@ -370,7 +370,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(taskRepository.getConnectorKind()); if (connectorUi == null) { - getParentEditor().setMessage("The editor may not be fully loaded", IMessageProvider.INFORMATION, + getTaskEditor().setMessage("The editor may not be fully loaded", IMessageProvider.INFORMATION, new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent e) { @@ -379,10 +379,10 @@ public abstract class AbstractTaskEditorPage extends FormPage { }); } - updateHeaderControls(); if (taskData != null) { createSections(); } + updateHeaderMessage(); } finally { setReflow(true); } @@ -482,7 +482,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { model.save(monitor); } catch (final CoreException e) { StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Error saving task", e)); - getParentEditor().setMessage("Could not save task", IMessageProvider.ERROR, new HyperlinkAdapter() { + getTaskEditor().setMessage("Could not save task", IMessageProvider.ERROR, new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent event) { StatusHandler.displayStatus("Save failed", e.getStatus()); @@ -490,8 +490,9 @@ public abstract class AbstractTaskEditorPage extends FormPage { }); } + updateHeaderMessage(); getManagedForm().dirtyStateChanged(); - updateHeaderControls(); + getTaskEditor().updateHeaderToolBar(); } @Override @@ -544,7 +545,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { if (taskData != null && !taskData.isNew()) { synchronizeEditorAction = new SynchronizeEditorAction(); - synchronizeEditorAction.selectionChanged(new StructuredSelection(getParentEditor())); + synchronizeEditorAction.selectionChanged(new StructuredSelection(getTaskEditor())); toolBarManager.add(synchronizeEditorAction); clearOutgoingAction = new ClearOutgoingAction(Collections.singletonList((AbstractTaskContainer) task)); @@ -614,7 +615,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { return model; } - public TaskEditor getParentEditor() { + public TaskEditor getTaskEditor() { return (TaskEditor) getEditor(); } @@ -647,7 +648,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { } else { message = "Submit failed"; } - getParentEditor().setMessage(message, IMessageProvider.ERROR, new HyperlinkAdapter() { + getTaskEditor().setMessage(message, IMessageProvider.ERROR, new HyperlinkAdapter() { @Override public void linkActivated(HyperlinkEvent e) { StatusHandler.displayStatus("Submit failed", status); @@ -668,12 +669,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { setModel(createModel(taskEditorInput)); } catch (final CoreException e) { StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Error opening task", e)); - getParentEditor().setMessage("Could not open task", IMessageProvider.ERROR, new HyperlinkAdapter() { - @Override - public void linkActivated(HyperlinkEvent event) { - StatusHandler.displayStatus("Open failed", e.getStatus()); - } - }); + getTaskEditor().setStatus("Error opening task", "Open failed", e.getStatus()); } TasksUi.getTaskListManager().getTaskList().addChangeListener(taskListChangeListener); @@ -731,7 +727,6 @@ public abstract class AbstractTaskEditorPage extends FormPage { doSave(new NullProgressMonitor()); refreshInput(); - updateHeaderControls(); if (taskData != null) { try { setReflow(false); @@ -750,8 +745,8 @@ public abstract class AbstractTaskEditorPage extends FormPage { createSections(); - getParentEditor().setMessage(null, 0); - getParentEditor().setActivePage(getId()); + getTaskEditor().setMessage(null, 0); + getTaskEditor().setActivePage(getId()); if (actionPart != null) { actionPart.setSubmitEnabled(true); @@ -760,7 +755,10 @@ public abstract class AbstractTaskEditorPage extends FormPage { setReflow(true); } } + + updateHeaderMessage(); getManagedForm().dirtyStateChanged(); + getTaskEditor().updateHeaderToolBar(); } finally { showEditorBusy(false); } @@ -771,7 +769,7 @@ public abstract class AbstractTaskEditorPage extends FormPage { try { model.refresh(null); } catch (CoreException e) { - getParentEditor().setMessage("Failed to read task data: " + e.getMessage(), IMessageProvider.ERROR); + getTaskEditor().setMessage("Failed to read task data: " + e.getMessage(), IMessageProvider.ERROR); taskData = null; return; } @@ -893,16 +891,16 @@ public abstract class AbstractTaskEditorPage extends FormPage { } public void showEditorBusy(boolean busy) { - getParentEditor().showBusy(busy); + getTaskEditor().showBusy(busy); } protected boolean supportsRefreshAttributes() { return true; } - private void updateHeaderControls() { + private void updateHeaderMessage() { if (taskData == null) { - getParentEditor().setMessage( + getTaskEditor().setMessage( "Task data not available. Press synchronize button (right) to retrieve latest data.", IMessageProvider.WARNING, new HyperlinkAdapter() { @Override @@ -913,7 +911,6 @@ public abstract class AbstractTaskEditorPage extends FormPage { } }); } - getParentEditor().updateHeader(); } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java index 7db3e4048..aa32e9acf 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditor.java @@ -25,12 +25,14 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; +import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector; import org.eclipse.mylyn.internal.tasks.core.LocalTask; import org.eclipse.mylyn.internal.tasks.ui.TaskTransfer; import org.eclipse.mylyn.internal.tasks.ui.TasksUiImages; @@ -58,6 +60,8 @@ import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.editor.IFormPage; import org.eclipse.ui.forms.editor.SharedHeaderFormEditor; +import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.events.IHyperlinkListener; import org.eclipse.ui.forms.widgets.Form; import org.eclipse.ui.part.WorkbenchPart; @@ -72,202 +76,73 @@ public class TaskEditor extends SharedHeaderFormEditor { public static final String ID_EDITOR = "org.eclipse.mylyn.tasks.ui.editors.task"; - protected AbstractTask task; - - private TaskEditorInput taskEditorInput; - - private final List<IEditorPart> editors = new ArrayList<IEditorPart>(); + private ToggleTaskActivationAction activateAction; + @Deprecated private IEditorPart contentOutlineProvider = null; - public final Object FAMILY_SUBMIT = new Object(); - - private MenuManager menuManager = new MenuManager(); - private EditorBusyIndicator editorBusyIndicator; - private IHyperlinkListener messageHyperLinkListener; - - private TaskDragSourceListener titleDragSourceListener; + private MenuManager menuManager; - private ToggleTaskActivationAction activateAction; - - public TaskEditor() { - } - - protected void contextMenuAboutToShow(IMenuManager manager) { - TaskEditorActionContributor contributor = getActionBarContributor(); - // IFormPage page = getActivePageInstance(); - if (contributor != null) { - contributor.contextMenuAboutToShow(manager); - } - } + private IHyperlinkListener messageHyperLinkListener; - private TaskEditorActionContributor getActionBarContributor() { - return (TaskEditorActionContributor) getEditorSite().getActionBarContributor(); - } + private AbstractTask task; - /** - * Configures the standard task editor context menu - * - * @Since 2.3 - */ - public void configureContextMenuManager(MenuManager manager, TextViewer textViewer) { - if (manager == null) { - return; - } - IMenuListener listener = new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - contextMenuAboutToShow(manager); - } - }; - manager.setRemoveAllWhenShown(true); - manager.addMenuListener(listener); - - if (textViewer != null) { - TaskEditorActionContributor contributor = getActionBarContributor(); - if (contributor != null) { - contributor.addTextViewer(textViewer); - } - } - } + private TaskEditorInput taskEditorInput; - protected void configureContextMenuManager(MenuManager manager) { - configureContextMenuManager(manager, null); - } + private TaskDragSourceListener titleDragSourceListener; - @SuppressWarnings("unchecked") - @Override - public Object getAdapter(Class adapter) { - return getAdapterDelgate(adapter); + public TaskEditor() { } - public Object getAdapterDelgate(Class<?> adapter) { - // TODO: consider adding: IContentOutlinePage.class.equals(adapter) && - if (contentOutlineProvider != null) { - return contentOutlineProvider.getAdapter(adapter); + @Deprecated + private void addPage(AbstractTaskEditorFactory factory) { + IEditorInput editorInput; + if (taskEditorInput != null && taskEditorInput.getTask() == null) { + editorInput = new RepositoryTaskEditorInput(taskEditorInput.getTaskRepository(), taskEditorInput.getTask() + .getTaskId(), ""); } else { - return super.getAdapter(adapter); - } - } - - @Override - public void doSave(IProgressMonitor monitor) { - for (IFormPage page : getPages()) { - if (page.isDirty()) { - page.doSave(monitor); - } + editorInput = getEditorInput(); } + if (factory.canCreateEditorFor(task) || factory.canCreateEditorFor(editorInput)) { + try { + IEditorPart editor = factory.createEditor(this, editorInput); + IEditorInput input = task != null ? factory.createEditorInput(task) : editorInput; + if (editor != null && input != null) { + FormPage taskEditor = (FormPage) editor; + editor.init(getEditorSite(), input); + int index = addPage(taskEditor); + if (input.getImageDescriptor() != null) { + setPageImage(index, CommonImages.getImage(input.getImageDescriptor())); + } + if (editor instanceof AbstractRepositoryTaskEditor) { + ((AbstractRepositoryTaskEditor) editor).setParentEditor(this); - editorDirtyStateChanged(); - } + if (editorInput instanceof RepositoryTaskEditorInput) { + RepositoryTaskEditorInput existingInput = (RepositoryTaskEditorInput) editorInput; + setPartName(existingInput.getName()); + } else if (editorInput instanceof NewTaskEditorInput) { + String label = ((NewTaskEditorInput) editorInput).getName(); + setPartName(label); + } + setPageText(index, factory.getTitle()); - @SuppressWarnings("unchecked") - IFormPage[] getPages() { - ArrayList formPages = new ArrayList(); - if (pages != null) { - for (int i = 0; i < pages.size(); i++) { - Object page = pages.get(i); - if (page instanceof IFormPage) { - formPages.add(page); + // TODO review + setActivePage(index); + } } - } - } - return (IFormPage[]) formPages.toArray(new IFormPage[formPages.size()]); - } - - /** - * Refresh editor with new contents (if any) - */ - @SuppressWarnings("deprecation") - public void refreshEditorContents() { - for (IFormPage page : getPages()) { - if (page instanceof AbstractRepositoryTaskEditor) { - AbstractRepositoryTaskEditor editor = (AbstractRepositoryTaskEditor) page; - editor.refreshEditor(); - } - } - } - - @Override - public void doSaveAs() { - throw new UnsupportedOperationException(); - } - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - // API REVIEW remove the commented parts - // if (!(input instanceof TaskEditorInput)) { -// throw new PartInitException("Invalid editor input \"" + input.getClass() + "\""); -// } - - super.init(site, input); - - // API REVIEW remove the instanceof check - if (input instanceof TaskEditorInput) { - this.taskEditorInput = (TaskEditorInput) input; - this.task = taskEditorInput.getTask(); - } - - setPartName(input.getName()); - } - - @Override - public boolean isSaveAsAllowed() { - return false; - } - - @Override - public boolean isDirty() { - for (IFormPage page : getPages()) { - if (page.isDirty()) { - return true; - } - } - return false; - } - - @Deprecated - public void markDirty() { - firePropertyChange(PROP_DIRTY); - } - - @Override - public void setFocus() { - IFormPage page = getActivePageInstance(); - if (page != null) { - page.setFocus(); - } else { - super.setFocus(); - } - } - - @Deprecated - public void setFocusOfActivePage() { - if (this.getActivePage() > -1) { - IFormPage page = this.getPages()[this.getActivePage()]; - if (page != null) { - page.setFocus(); + // HACK: overwrites if multiple present + if (factory.providesOutline()) { + contentOutlineProvider = editor; + } + } catch (Exception e) { + StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, + "Could not create editor via factory: " + factory, e)); } } - } - - @Override - public void dispose() { - if (editorBusyIndicator != null) { - editorBusyIndicator.stop(); - } - for (IEditorPart part : editors) { - part.dispose(); - } - if (activateAction != null) { - activateAction.dispose(); - } - super.dispose(); - } - public TaskEditorInput getTaskEditorInput() { - return taskEditorInput; } @SuppressWarnings("deprecation") @@ -344,102 +219,120 @@ public class TaskEditor extends SharedHeaderFormEditor { } updateTitleImage(); + updateHeaderToolBar(); } - @Deprecated - private void addPage(AbstractTaskEditorFactory factory) { - IEditorInput editorInput; - if (taskEditorInput != null && taskEditorInput.getTask() == null) { - editorInput = new RepositoryTaskEditorInput(taskEditorInput.getTaskRepository(), taskEditorInput.getTask() - .getTaskId(), ""); - } else { - editorInput = getEditorInput(); - } - if (factory.canCreateEditorFor(task) || factory.canCreateEditorFor(editorInput)) { - try { - IEditorPart editor = factory.createEditor(this, editorInput); - IEditorInput input = task != null ? factory.createEditorInput(task) : editorInput; - if (editor != null && input != null) { - FormPage taskEditor = (FormPage) editor; - editor.init(getEditorSite(), input); - int index = addPage(taskEditor); - if (input.getImageDescriptor() != null) { - setPageImage(index, CommonImages.getImage(input.getImageDescriptor())); - } - if (editor instanceof AbstractRepositoryTaskEditor) { - ((AbstractRepositoryTaskEditor) editor).setParentEditor(this); - - if (editorInput instanceof RepositoryTaskEditorInput) { - RepositoryTaskEditorInput existingInput = (RepositoryTaskEditorInput) editorInput; - setPartName(existingInput.getName()); - } else if (editorInput instanceof NewTaskEditorInput) { - String label = ((NewTaskEditorInput) editorInput).getName(); - setPartName(label); - } - setPageText(index, factory.getTitle()); + protected void configureContextMenuManager(MenuManager manager) { + configureContextMenuManager(manager, null); + } - // TODO review - setActivePage(index); - } - } + /** + * Configures the standard task editor context menu + * + * @Since 2.3 + */ + public void configureContextMenuManager(MenuManager manager, TextViewer textViewer) { + if (manager == null) { + return; + } + IMenuListener listener = new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + contextMenuAboutToShow(manager); + } + }; + manager.setRemoveAllWhenShown(true); + manager.addMenuListener(listener); - // HACK: overwrites if multiple present - if (factory.providesOutline()) { - contentOutlineProvider = editor; - } - } catch (Exception e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Could not create editor via factory: " + factory, e)); + if (textViewer != null) { + TaskEditorActionContributor contributor = getActionBarContributor(); + if (contributor != null) { + contributor.addTextViewer(textViewer); } } + } + protected void contextMenuAboutToShow(IMenuManager manager) { + TaskEditorActionContributor contributor = getActionBarContributor(); + // IFormPage page = getActivePageInstance(); + if (contributor != null) { + contributor.contextMenuAboutToShow(manager); + } } - @SuppressWarnings("deprecation") - private void updateTitleImage() { - if (task != null) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(task.getConnectorKind()); - if (connectorUi != null) { - ImageDescriptor overlayDescriptor = connectorUi.getTaskKindOverlay(task); - setTitleImage(CommonImages.getCompositeTaskImage(TasksUiImages.TASK, overlayDescriptor, false)); - } else { - setTitleImage(CommonImages.getImage(TasksUiImages.TASK)); + @Override + protected void createHeaderContents(IManagedForm headerForm) { + getToolkit().decorateFormHeading(headerForm.getForm().getForm()); + updateHeader(); + installTitleDrag(getHeaderForm().getForm().getForm()); + } + + @Override + public void dispose() { + if (editorBusyIndicator != null) { + editorBusyIndicator.stop(); + } + if (activateAction != null) { + activateAction.dispose(); + } + super.dispose(); + } + + @Override + public void doSave(IProgressMonitor monitor) { + for (IFormPage page : getPages()) { + if (page.isDirty()) { + page.doSave(monitor); } - } else if (getEditorInput() instanceof AbstractRepositoryTaskEditorInput) { - this.setTitleImage(CommonImages.getImage(TasksUiImages.TASK_REMOTE)); - } else { - setTitleImage(CommonImages.getImage(TasksUiImages.TASK)); } + + editorDirtyStateChanged(); } - /** - * Update the title of the editor - */ - @Deprecated - public void updateTitle(String name) { - // setContentDescription(name); - setPartName(name); - setTitleToolTip(name); - updateFormTitle(); + @Override + public void doSaveAs() { + throw new UnsupportedOperationException(); + } + + private TaskEditorActionContributor getActionBarContributor() { + return (TaskEditorActionContributor) getEditorSite().getActionBarContributor(); } + @SuppressWarnings("unchecked") @Override - public void showBusy(boolean busy) { - if (busy) { - if (TasksUiPlugin.isAnimationsEnabled()) { - editorBusyIndicator.start(); - } + public Object getAdapter(Class adapter) { + return getAdapterDelgate(adapter); + } + + public Object getAdapterDelgate(Class<?> adapter) { + // TODO: consider adding: IContentOutlinePage.class.equals(adapter) && + if (contentOutlineProvider != null) { + return contentOutlineProvider.getAdapter(adapter); } else { - editorBusyIndicator.stop(); + return super.getAdapter(adapter); } - Form form = getHeaderForm().getForm().getForm(); - EditorUtil.setEnabledState(form.getBody(), !busy); - for (IFormPage page : getPages()) { - if (page instanceof WorkbenchPart) { - WorkbenchPart part = (WorkbenchPart) page; - part.showBusy(busy); + } + + @SuppressWarnings("unchecked") + IFormPage[] getPages() { + ArrayList formPages = new ArrayList(); + if (pages != null) { + for (int i = 0; i < pages.size(); i++) { + Object page = pages.get(i); + if (page instanceof IFormPage) { + formPages.add(page); + } } } + return (IFormPage[]) formPages.toArray(new IFormPage[formPages.size()]); + } + + @Deprecated + protected IWorkbenchSiteProgressService getProgressService() { + Object siteService = getEditorSite().getAdapter(IWorkbenchSiteProgressService.class); + if (siteService != null) { + return (IWorkbenchSiteProgressService) siteService; + } + return null; } public ISelection getSelection() { @@ -450,15 +343,36 @@ public class TaskEditor extends SharedHeaderFormEditor { } } + public TaskEditorInput getTaskEditorInput() { + return taskEditorInput; + } + + @Deprecated + public Form getTopForm() { + return this.getHeaderForm().getForm().getForm(); + } + @Override - protected void createHeaderContents(IManagedForm headerForm) { - getToolkit().decorateFormHeading(headerForm.getForm().getForm()); - headerForm.getForm().setImage(CommonImages.getImage(TasksUiImages.TASK)); - updateFormTitle(); + public void init(IEditorSite site, IEditorInput input) throws PartInitException { + // API REVIEW remove the commented parts + // if (!(input instanceof TaskEditorInput)) { +// throw new PartInitException("Invalid editor input \"" + input.getClass() + "\""); +// } + + super.init(site, input); + + // API REVIEW remove the instanceof check + if (input instanceof TaskEditorInput) { + this.taskEditorInput = (TaskEditorInput) input; + this.task = taskEditorInput.getTask(); + } + + setPartName(input.getName()); } - private void installTitleDrag(Form form, final RepositoryTaskData taskData) { - if (taskData != null && taskData.isNew()) { + private void installTitleDrag(Form form) { + // API 3.0 remove + if (task == null) { return; } @@ -473,55 +387,68 @@ public class TaskEditor extends SharedHeaderFormEditor { titleDragSourceListener = new TaskDragSourceListener(new SelectionProviderAdapter() { @Override public ISelection getSelection() { - if (task != null) { - return new StructuredSelection(task); - } else if (taskData != null && !taskData.isNew()) { - return new StructuredSelection(taskData); - } - return null; + return new StructuredSelection(task); } }); form.addTitleDragSupport(DND.DROP_MOVE | DND.DROP_LINK, transferTypes, titleDragSourceListener); } } - @SuppressWarnings("deprecation") - protected void updateFormTitle() { - RepositoryTaskData taskData = null; - IEditorInput input = getEditorInput(); - if (input instanceof TaskEditorInput) { - if (task instanceof LocalTask) { - getHeaderForm().getForm().setText("Task: " + task.getSummary()); - } else if (task != null) { - setFormHeaderImage(task.getConnectorKind()); - setFormHeaderLabel(task); + @Override + public boolean isDirty() { + for (IFormPage page : getPages()) { + if (page.isDirty()) { + return true; } - } else if (input instanceof RepositoryTaskEditorInput) { - taskData = ((RepositoryTaskEditorInput) input).getTaskData(); - if (task != null && taskData != null && !taskData.isNew()) { - setFormHeaderImage(task.getConnectorKind()); - setFormHeaderLabel(task); - } else { - if (taskData != null) { - setFormHeaderImage(taskData.getConnectorKind()); - setFormHeaderLabel(taskData); - } + } + return false; + } + + @Override + public boolean isSaveAsAllowed() { + return false; + } + + @Deprecated + public void markDirty() { + firePropertyChange(PROP_DIRTY); + } + + /** + * Refresh editor with new contents (if any) + */ + @Deprecated + public void refreshEditorContents() { + for (IFormPage page : getPages()) { + if (page instanceof AbstractRepositoryTaskEditor) { + AbstractRepositoryTaskEditor editor = (AbstractRepositoryTaskEditor) page; + editor.refreshEditor(); } } - installTitleDrag(getHeaderForm().getForm().getForm(), taskData); } - private void setFormHeaderImage(String repositoryKind) { - ImageDescriptor overlay = TasksUiPlugin.getDefault().getOverlayIcon(repositoryKind); - Image image = CommonImages.getImageWithOverlay(TasksUiImages.REPOSITORY, overlay, false, false); - if (getHeaderForm() != null) { - getHeaderForm().getForm().setImage(image); + @Override + public void setFocus() { + IFormPage page = getActivePageInstance(); + if (page != null) { + page.setFocus(); + } else { + super.setFocus(); } } @Deprecated - public Form getTopForm() { - return this.getHeaderForm().getForm().getForm(); + public void setFocusOfActivePage() { + if (this.getActivePage() > -1) { + IFormPage page = this.getPages()[this.getActivePage()]; + if (page != null) { + page.setFocus(); + } + } + } + + public void setMessage(String message, int type) { + setMessage(message, type, null); } /** @@ -543,62 +470,60 @@ public class TaskEditor extends SharedHeaderFormEditor { } } - public void setMessage(String message, int type) { - setMessage(message, type, null); - } - - protected IWorkbenchSiteProgressService getProgressService() { - Object siteService = getEditorSite().getAdapter(IWorkbenchSiteProgressService.class); - if (siteService != null) { - return (IWorkbenchSiteProgressService) siteService; - } - return null; + /** + * @since 3.0 + */ + public void setStatus(String message, final String title, final IStatus status) { + setMessage(message, IMessageProvider.ERROR, new HyperlinkAdapter() { + @Override + public void linkActivated(HyperlinkEvent event) { + StatusHandler.displayStatus(title, status); + } + }); } - private void setFormHeaderLabel(RepositoryTaskData taskData) { - String kindLabel = taskData.getTaskKind(); - String idLabel = taskData.getTaskKey(); - - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(taskData.getConnectorKind()); - if (connectorUi != null && task != null) { - kindLabel = connectorUi.getTaskKindLabel(task); - if (taskData.isNew()) { - kindLabel = "New " + kindLabel; - idLabel = ""; + @Override + public void showBusy(boolean busy) { + if (busy) { + if (TasksUiPlugin.isAnimationsEnabled()) { + editorBusyIndicator.start(); } + } else { + editorBusyIndicator.stop(); } - - if (getHeaderForm().getForm() != null) { - if (idLabel != null) { - getHeaderForm().getForm().setText(kindLabel + " " + idLabel); - } else { - getHeaderForm().getForm().setText(kindLabel); + Form form = getHeaderForm().getForm().getForm(); + EditorUtil.setEnabledState(form.getBody(), !busy); + for (IFormPage page : getPages()) { + if (page instanceof WorkbenchPart) { + WorkbenchPart part = (WorkbenchPart) page; + part.showBusy(busy); } } } - private void setFormHeaderLabel(AbstractTask repositoryTask) { - AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(repositoryTask.getConnectorKind()); - String kindLabel = ""; - if (connectorUi != null) { - kindLabel = connectorUi.getTaskKindLabel(repositoryTask); - } - - String idLabel = repositoryTask.getTaskKey(); - - if (idLabel != null) { - if (getHeaderForm().getForm() != null) { - getHeaderForm().getForm().setText(kindLabel + " " + idLabel); + @SuppressWarnings("deprecation") + private void updateHeader() { + IEditorInput input = getEditorInput(); + if (input instanceof TaskEditorInput) { + updateHeaderImage(task.getConnectorKind()); + updateHeaderLabel(task); + } else if (input instanceof RepositoryTaskEditorInput) { + RepositoryTaskData taskData = ((RepositoryTaskEditorInput) input).getTaskData(); + if (task != null) { + updateHeaderImage(task.getConnectorKind()); + updateHeaderLabel(task); + } else if (taskData != null) { + updateHeaderImage(taskData.getConnectorKind()); + updateHeaderLabel(taskData); } - } else if (getHeaderForm() != null && getHeaderForm().getForm() != null) { - getHeaderForm().getForm().setText(kindLabel); } + installTitleDrag(getHeaderForm().getForm().getForm()); } /** * @since 3.0 */ - public void updateHeader() { + public void updateHeaderToolBar() { Form form = getHeaderForm().getForm().getForm(); IToolBarManager toolBarManager = form.getToolBarManager(); @@ -621,4 +546,84 @@ public class TaskEditor extends SharedHeaderFormEditor { toolBarManager.update(true); } + private void updateHeaderImage(String connectorKind) { + if (LocalRepositoryConnector.CONNECTOR_KIND.equals(connectorKind)) { + getHeaderForm().getForm().setImage(CommonImages.getImage(TasksUiImages.TASK)); + } else { + ImageDescriptor overlay = TasksUiPlugin.getDefault().getOverlayIcon(connectorKind); + Image image = CommonImages.getImageWithOverlay(TasksUiImages.REPOSITORY, overlay, false, false); + getHeaderForm().getForm().setImage(image); + } + } + + private void updateHeaderLabel(AbstractTask task) { + if (task instanceof LocalTask) { + getHeaderForm().getForm().setText("Task: " + task.getSummary()); + } else { + AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(task.getConnectorKind()); + String kindLabel = ""; + if (connectorUi != null) { + kindLabel = connectorUi.getTaskKindLabel(task); + } + + String idLabel = task.getTaskKey(); + if (idLabel != null) { + getHeaderForm().getForm().setText(kindLabel + " " + idLabel); + } else { + getHeaderForm().getForm().setText(kindLabel); + } + } + } + + @Deprecated + private void updateHeaderLabel(RepositoryTaskData taskData) { + String kindLabel = taskData.getTaskKind(); + String idLabel = taskData.getTaskKey(); + + AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(taskData.getConnectorKind()); + if (connectorUi != null && task != null) { + kindLabel = connectorUi.getTaskKindLabel(task); + if (taskData.isNew()) { + kindLabel = "New " + kindLabel; + idLabel = ""; + } + } + + if (getHeaderForm().getForm() != null) { + if (idLabel != null) { + getHeaderForm().getForm().setText(kindLabel + " " + idLabel); + } else { + getHeaderForm().getForm().setText(kindLabel); + } + } + } + + /** + * Update the title of the editor + */ + @Deprecated + public void updateTitle(String name) { + // setContentDescription(name); + setPartName(name); + setTitleToolTip(name); + updateHeader(); + } + + @SuppressWarnings("deprecation") + private void updateTitleImage() { + if (task != null) { + AbstractRepositoryConnectorUi connectorUi = TasksUiPlugin.getConnectorUi(task.getConnectorKind()); + if (connectorUi != null) { + ImageDescriptor overlayDescriptor = connectorUi.getTaskKindOverlay(task); + setTitleImage(CommonImages.getCompositeTaskImage(TasksUiImages.TASK, overlayDescriptor, false)); + } else { + setTitleImage(CommonImages.getImage(TasksUiImages.TASK)); + } + } else if (getEditorInput() instanceof AbstractRepositoryTaskEditorInput) { + setTitleImage(CommonImages.getImage(TasksUiImages.TASK_REMOTE)); + } else { + setTitleImage(CommonImages.getImage(TasksUiImages.TASK)); + } + } + } |