diff options
author | relves | 2006-10-24 07:07:12 +0000 |
---|---|---|
committer | relves | 2006-10-24 07:07:12 +0000 |
commit | 967190fe6010143759fd89be88edbca6490c0ebc (patch) | |
tree | 6f02674351a8ff13b934d4d81c45001c5fb76eda /org.eclipse.mylyn.trac.ui | |
parent | a34c29cf05816bfaa63c9f2f701039494c2be89d (diff) | |
download | org.eclipse.mylyn.tasks-967190fe6010143759fd89be88edbca6490c0ebc.tar.gz org.eclipse.mylyn.tasks-967190fe6010143759fd89be88edbca6490c0ebc.tar.xz org.eclipse.mylyn.tasks-967190fe6010143759fd89be88edbca6490c0ebc.zip |
NEW - bug 161903: Extend ITaskFactory to create editors for new tasks
https://bugs.eclipse.org/bugs/show_bug.cgi?id=161903
Diffstat (limited to 'org.eclipse.mylyn.trac.ui')
5 files changed, 132 insertions, 234 deletions
diff --git a/org.eclipse.mylyn.trac.ui/plugin.xml b/org.eclipse.mylyn.trac.ui/plugin.xml index 09554d492..a6695c76d 100644 --- a/org.eclipse.mylyn.trac.ui/plugin.xml +++ b/org.eclipse.mylyn.trac.ui/plugin.xml @@ -34,15 +34,5 @@ point="org.eclipse.mylar.tasks.ui.editors"> <editorFactory class="org.eclipse.mylar.internal.trac.ui.editor.TracTaskEditorFactory"/> </extension> - <extension - point="org.eclipse.ui.editors"> - <editor - class="org.eclipse.mylar.internal.trac.ui.editor.NewTracTaskEditor" - contributorClass="org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorActionContributor" - icon="icons/etool16/task-repository.gif" - id="org.eclipse.mylar.trac.ui.newBugEditor" - name="Trac viewer"> - </editor> - </extension> </plugin> diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java index f92ba5712..3686d950b 100644 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java +++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java @@ -1,104 +1,146 @@ /******************************************************************************* - * Copyright (c) 2004 - 2006 University Of British Columbia and others. + * Copyright (c) 2004 - 2006 Mylar committers 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: - * University Of British Columbia - initial API and implementation *******************************************************************************/ package org.eclipse.mylar.internal.trac.ui.editor; +import java.util.ArrayList; +import java.util.Calendar; + import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.mylar.context.core.MylarStatusHandler; -import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.editors.NewBugEditorInput; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PartInitException; - -// based on NewBugzillaTaskEditor +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +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.viewers.IStructuredSelection; +import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; +import org.eclipse.mylar.internal.tasks.ui.editors.AbstractNewRepositoryTaskEditor; +import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; +import org.eclipse.mylar.internal.trac.core.ITracClient; +import org.eclipse.mylar.internal.trac.core.InvalidTicketException; +import org.eclipse.mylar.internal.trac.core.TracCorePlugin; +import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; +import org.eclipse.mylar.internal.trac.core.TracTask; +import org.eclipse.mylar.internal.trac.core.model.TracTicket; +import org.eclipse.mylar.internal.trac.ui.TracUiPlugin; +import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; +import org.eclipse.mylar.tasks.core.ITask; +import org.eclipse.mylar.tasks.core.TaskCategory; +import org.eclipse.mylar.tasks.core.TaskRepository; +import org.eclipse.mylar.tasks.ui.TasksUiPlugin; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.forms.editor.FormEditor; /** - * @author Rob Elves - * - * TODO: Get rid of this wrapper. - * Before this can be done a factory must be added to handle new bug editor input in MylarTaskEditor.addPages() - * then all occurrences of BugzillaUiPlugin.NEW_BUG_EDITOR_ID can be replaced with TaskListPreferenceConstants.TASK_EDITOR_ID - * so that MylarTaskEditor is opened rather than this. + * @author Steffen Pingel */ -public class NewTracTaskEditor extends MylarTaskEditor { +public class NewTracTaskEditor extends AbstractNewRepositoryTaskEditor { - private Menu contextMenu; - - private NewTracTaskEditorPage newBugEditor; + private static final String SUBMIT_JOB_LABEL = "Submitting to Trac repository"; - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - setSite(site); - setInput(input); + public NewTracTaskEditor(FormEditor editor) { + super(editor); } @Override - protected void addPages() { - MenuManager manager = new MenuManager(); - IMenuListener listener = new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - contextMenuAboutToShow(manager); + protected void submitBug() { + if (!prepareSubmit()) { + return; + } + + final TracRepositoryConnector connector = (TracRepositoryConnector) TasksUiPlugin.getRepositoryManager().getRepositoryConnector( + repository.getKind()); + + updateBug(); + + JobChangeAdapter listener = new JobChangeAdapter() { + public void done(final IJobChangeEvent event) { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + if (event.getJob().getResult().getCode() == Status.OK + && event.getJob().getResult().getMessage() != null) { + close(); + String newTaskHandle = AbstractRepositoryTask.getHandle(repository.getUrl(), event + .getJob().getResult().getMessage()); + ITask newTask = TasksUiPlugin.getTaskListManager().getTaskList().getTask(newTaskHandle); + if (newTask != null) { + Calendar selectedDate = datePicker.getDate(); + if(selectedDate != null) { + //NewLocalTaskAction.scheduleNewTask(newTask); + TasksUiPlugin.getTaskListManager().setScheduledFor(newTask, selectedDate.getTime()); + } + + newTask.setEstimatedTimeHours(estimated.getSelection()); + + Object selectedObject = null; + if (TaskListView.getFromActivePerspective() != null) + selectedObject = ((IStructuredSelection) TaskListView + .getFromActivePerspective().getViewer().getSelection()) + .getFirstElement(); + + if (selectedObject instanceof TaskCategory) { + TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer( + ((TaskCategory) selectedObject), newTask); + } + TaskUiUtil.refreshAndOpenTaskListElement(newTask); + } + return; + } else if (event.getJob().getResult().getCode() == Status.ERROR) { + TracUiPlugin.handleTracException(event.getJob().getResult()); + submitButton.setEnabled(true); + showBusy(false); + } + } + }); } }; - manager.setRemoveAllWhenShown(true); - manager.addMenuListener(listener); - contextMenu = manager.createContextMenu(getContainer()); - getContainer().setMenu(contextMenu); + + final TracTicket ticket; try { - newBugEditor = new NewTracTaskEditorPage(this); - int index = addPage(newBugEditor); - String label = "<unsubmitted> "+((NewBugEditorInput)getEditorInput()).getRepository().getUrl(); - setPageText(index, "Trac"); - setPartName(label); - } catch (PartInitException e) { - MylarStatusHandler.fail(e, "Could not add new bug form", true); + ticket = TracRepositoryConnector.getTracTicket(repository, getRepositoryTaskData()); + } catch (InvalidTicketException e) { + TracUiPlugin.handleTracException(e); + submitButton.setEnabled(true); + showBusy(false); + return; } - } - - @Override - public Object getAdapter(Class adapter) { - return newBugEditor.getAdapter(adapter); - } - - public NewTracTaskEditorPage getPage() { - return newBugEditor; - } + + final boolean addToRoot = addToTaskListRoot.getSelection(); - @Override - public void doSave(IProgressMonitor monitor) { - MessageDialog.openWarning(this.newBugEditor.getSite().getShell(), "Operation not supported", "Save of un-submitted new tasks is not currently supported.\nPlease submit all new tasks."); - monitor.setCanceled(true); - } + Job submitJob = new Job(SUBMIT_JOB_LABEL) { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + ITracClient server = connector.getClientManager().getRepository(repository); + int id = server.createTicket(ticket); - @Override - public void doSaveAs() { - // ignore + TracTask newTask = new TracTask(AbstractRepositoryTask.getHandle(repository.getUrl(), id), + TracRepositoryConnector.getTicketDescription(ticket), true); + if (addToRoot) { + TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, + TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory()); + } else { + TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask); + } - } + java.util.List<TaskRepository> repositoriesToSync = new ArrayList<TaskRepository>(); + repositoriesToSync.add(repository); + TasksUiPlugin.getSynchronizationScheduler().synchNow(0, repositoriesToSync); - @Override - public boolean isSaveAsAllowed() { - // ignore - return false; - } + return Status.OK_STATUS; + } catch (Exception e) { + return TracCorePlugin.toStatus(e); + } + } + }; - @Override - public boolean isDirty() { - return true; + submitJob.addJobChangeListener(listener); + submitJob.schedule(); } } diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditorPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditorPage.java deleted file mode 100644 index eed82005f..000000000 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditorPage.java +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 - 2006 Mylar committers 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 - *******************************************************************************/ - -package org.eclipse.mylar.internal.trac.ui.editor; - -import java.util.ArrayList; -import java.util.Calendar; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -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.viewers.IStructuredSelection; -import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; -import org.eclipse.mylar.internal.tasks.ui.editors.AbstractNewRepositoryTaskEditor; -import org.eclipse.mylar.internal.tasks.ui.views.TaskListView; -import org.eclipse.mylar.internal.trac.core.ITracClient; -import org.eclipse.mylar.internal.trac.core.InvalidTicketException; -import org.eclipse.mylar.internal.trac.core.TracCorePlugin; -import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; -import org.eclipse.mylar.internal.trac.core.TracTask; -import org.eclipse.mylar.internal.trac.core.model.TracTicket; -import org.eclipse.mylar.internal.trac.ui.TracUiPlugin; -import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; -import org.eclipse.mylar.tasks.core.ITask; -import org.eclipse.mylar.tasks.core.TaskCategory; -import org.eclipse.mylar.tasks.core.TaskRepository; -import org.eclipse.mylar.tasks.ui.TasksUiPlugin; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.forms.editor.FormEditor; - -/** - * @author Steffen Pingel - */ -public class NewTracTaskEditorPage extends AbstractNewRepositoryTaskEditor { - - private static final String SUBMIT_JOB_LABEL = "Submitting to Trac repository"; - - public NewTracTaskEditorPage(FormEditor editor) { - super(editor); - } - - @Override - protected void submitBug() { - if (!prepareSubmit()) { - return; - } - - final TracRepositoryConnector connector = (TracRepositoryConnector) TasksUiPlugin.getRepositoryManager().getRepositoryConnector( - repository.getKind()); - - updateBug(); - - JobChangeAdapter listener = new JobChangeAdapter() { - public void done(final IJobChangeEvent event) { - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - public void run() { - if (event.getJob().getResult().getCode() == Status.OK - && event.getJob().getResult().getMessage() != null) { - close(); - String newTaskHandle = AbstractRepositoryTask.getHandle(repository.getUrl(), event - .getJob().getResult().getMessage()); - ITask newTask = TasksUiPlugin.getTaskListManager().getTaskList().getTask(newTaskHandle); - if (newTask != null) { - Calendar selectedDate = datePicker.getDate(); - if(selectedDate != null) { - //NewLocalTaskAction.scheduleNewTask(newTask); - TasksUiPlugin.getTaskListManager().setScheduledFor(newTask, selectedDate.getTime()); - } - - newTask.setEstimatedTimeHours(estimated.getSelection()); - - Object selectedObject = null; - if (TaskListView.getFromActivePerspective() != null) - selectedObject = ((IStructuredSelection) TaskListView - .getFromActivePerspective().getViewer().getSelection()) - .getFirstElement(); - - if (selectedObject instanceof TaskCategory) { - TasksUiPlugin.getTaskListManager().getTaskList().moveToContainer( - ((TaskCategory) selectedObject), newTask); - } - TaskUiUtil.refreshAndOpenTaskListElement(newTask); - } - return; - } else if (event.getJob().getResult().getCode() == Status.ERROR) { - TracUiPlugin.handleTracException(event.getJob().getResult()); - submitButton.setEnabled(true); - showBusy(false); - } - } - }); - } - }; - - final TracTicket ticket; - try { - ticket = TracRepositoryConnector.getTracTicket(repository, getRepositoryTaskData()); - } catch (InvalidTicketException e) { - TracUiPlugin.handleTracException(e); - submitButton.setEnabled(true); - showBusy(false); - return; - } - - final boolean addToRoot = addToTaskListRoot.getSelection(); - - Job submitJob = new Job(SUBMIT_JOB_LABEL) { - @Override - protected IStatus run(IProgressMonitor monitor) { - try { - ITracClient server = connector.getClientManager().getRepository(repository); - int id = server.createTicket(ticket); - - TracTask newTask = new TracTask(AbstractRepositoryTask.getHandle(repository.getUrl(), id), - TracRepositoryConnector.getTicketDescription(ticket), true); - if (addToRoot) { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask, - TasksUiPlugin.getTaskListManager().getTaskList().getRootCategory()); - } else { - TasksUiPlugin.getTaskListManager().getTaskList().addTask(newTask); - } - - java.util.List<TaskRepository> repositoriesToSync = new ArrayList<TaskRepository>(); - repositoriesToSync.add(repository); - TasksUiPlugin.getSynchronizationScheduler().synchNow(0, repositoriesToSync); - - return Status.OK_STATUS; - } catch (Exception e) { - return TracCorePlugin.toStatus(e); - } - } - }; - - submitJob.addJobChangeListener(listener); - submitJob.schedule(); - } - -} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java index 789c708af..13e11b3ab 100644 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java +++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java @@ -11,6 +11,8 @@ import org.eclipse.mylar.context.core.MylarStatusHandler; import org.eclipse.mylar.internal.tasks.ui.ITaskEditorFactory; import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; +import org.eclipse.mylar.internal.tasks.ui.editors.NewBugEditorInput; +import org.eclipse.mylar.internal.tasks.ui.editors.TaskEditorInput; import org.eclipse.mylar.internal.trac.core.TracCorePlugin; import org.eclipse.mylar.internal.trac.core.TracRepositoryConnector; import org.eclipse.mylar.internal.trac.core.TracTask; @@ -33,18 +35,27 @@ public class TracTaskEditorFactory implements ITaskEditorFactory { } return task instanceof TracTask; } - + public boolean canCreateEditorFor(IEditorInput input) { if (input instanceof ExistingBugEditorInput) { ExistingBugEditorInput existingInput = (ExistingBugEditorInput) input; return existingInput.getRepositoryTaskData() != null && TracCorePlugin.REPOSITORY_KIND.equals(existingInput.getRepository().getKind()); + } else if (input instanceof NewBugEditorInput) { + NewBugEditorInput newInput = (NewBugEditorInput) input; + return newInput.getRepositoryTaskData() != null + && TracCorePlugin.REPOSITORY_KIND.equals(newInput.getRepository().getKind()); } return false; } - public IEditorPart createEditor(MylarTaskEditor parentEditor) { - return new TracTaskEditor(parentEditor); + public IEditorPart createEditor(MylarTaskEditor parentEditor, IEditorInput editorInput) { + if (editorInput instanceof ExistingBugEditorInput || editorInput instanceof TaskEditorInput) { + return new TracTaskEditor(parentEditor); + } else if (editorInput instanceof NewBugEditorInput) { + return new NewTracTaskEditor(parentEditor); + } + return null; } public IEditorInput createEditorInput(ITask task) { diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskWizard.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskWizard.java index 8e86354be..2d4677037 100644 --- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskWizard.java +++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskWizard.java @@ -14,6 +14,7 @@ package org.eclipse.mylar.internal.trac.ui.wizard; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.mylar.internal.tasks.ui.TaskListImages; +import org.eclipse.mylar.internal.tasks.ui.TaskListPreferenceConstants; import org.eclipse.mylar.internal.tasks.ui.TaskUiUtil; import org.eclipse.mylar.internal.tasks.ui.editors.NewBugEditorInput; import org.eclipse.mylar.tasks.core.TaskRepository; @@ -61,7 +62,7 @@ public class NewTracTaskWizard extends Wizard implements INewWizard { public boolean performFinish() { NewBugEditorInput editorInput = new NewBugEditorInput(taskRepository, newTaskPage.getRepositoryTaskData()); IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - TaskUiUtil.openEditor(editorInput, "org.eclipse.mylar.trac.ui.newBugEditor", page); + TaskUiUtil.openEditor(editorInput, TaskListPreferenceConstants.TASK_EDITOR_ID, page); return true; } |