diff options
author | mkersten | 2006-08-24 22:44:34 +0000 |
---|---|---|
committer | mkersten | 2006-08-24 22:44:34 +0000 |
commit | 94f462b8a7f13d71448051ea86e1100a0c4c5495 (patch) | |
tree | ac4a39a6a2206b52b1eb7735da2a7efecc366b87 | |
parent | 91c1084d9947e1c86e489e1464926d4b0f857536 (diff) | |
download | org.eclipse.mylyn.tasks-94f462b8a7f13d71448051ea86e1100a0c4c5495.tar.gz org.eclipse.mylyn.tasks-94f462b8a7f13d71448051ea86e1100a0c4c5495.tar.xz org.eclipse.mylyn.tasks-94f462b8a7f13d71448051ea86e1100a0c4c5495.zip |
Progress on: 151907: Trac connector: implement rich editor
https://bugs.eclipse.org/bugs/show_bug.cgi?id=151907
5 files changed, 292 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF index 687d34d73..ffdbc68a0 100644 --- a/org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF @@ -18,5 +18,6 @@ Eclipse-LazyStart: true Export-Package: org.eclipse.mylar.internal.trac, org.eclipse.mylar.internal.trac.core, org.eclipse.mylar.internal.trac.model, + org.eclipse.mylar.internal.trac.ui.editor, org.eclipse.mylar.internal.trac.ui.search, org.eclipse.mylar.internal.trac.ui.wizard diff --git a/org.eclipse.mylyn.trac.ui/plugin.xml b/org.eclipse.mylyn.trac.ui/plugin.xml index 1fd14fe59..7a75cb6fd 100644 --- a/org.eclipse.mylyn.trac.ui/plugin.xml +++ b/org.eclipse.mylyn.trac.ui/plugin.xml @@ -25,5 +25,9 @@ urlRepository="http://trac.edgewall.org" version="TRAC_0_9"/> </extension> + <extension + point="org.eclipse.mylar.tasks.ui.editors"> + <editorFactory class="org.eclipse.mylar.internal.trac.ui.editor.TracTaskEditorFactory"/> + </extension> </plugin> diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java new file mode 100644 index 000000000..55f22f17c --- /dev/null +++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java @@ -0,0 +1,181 @@ +/******************************************************************************* + * 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.List; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.NullProgressMonitor; +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.mylar.internal.tasks.ui.editors.AbstractBugEditorInput; +import org.eclipse.mylar.internal.tasks.ui.editors.AbstractRepositoryTaskEditor; +import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; +import org.eclipse.mylar.internal.tasks.ui.editors.RepositoryTaskOutlineNode; +import org.eclipse.mylar.internal.trac.TracRepositoryConnector; +import org.eclipse.mylar.internal.trac.TracUiPlugin; +import org.eclipse.mylar.internal.trac.core.ITracClient; +import org.eclipse.mylar.internal.trac.core.InvalidTicketException; +import org.eclipse.mylar.internal.trac.model.TracTicket; +import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; +import org.eclipse.mylar.tasks.core.RepositoryTaskAttribute; +import org.eclipse.mylar.tasks.core.RepositoryTaskData; +import org.eclipse.mylar.tasks.ui.TasksUiPlugin; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.forms.editor.FormEditor; + +/** + * @author Steffen Pingel + */ +public class TracTaskEditor extends AbstractRepositoryTaskEditor { + + private static final String SUBMIT_JOB_LABEL = "Submitting to Trac repository"; + + private TracRepositoryConnector connector; + + public TracTaskEditor(FormEditor editor) { + super(editor); + } + + @Override + protected void addRadioButtons(Composite buttonComposite) { + // TODO remove when operation handling has been implemented + } + + @Override + public void createCustomAttributeLayout() { + + } + + @Override + protected void createCustomAttributeLayout(Composite composite) { + } + + @Override + public RepositoryTaskData getRepositoryTaskData() { + return editorInput.getRepositoryTaskData(); + } + + @Override + protected String getTitleString() { + // TODO Auto-generated method stub + return null; + } + + public void init(IEditorSite site, IEditorInput input) { + if (!(input instanceof ExistingBugEditorInput)) + return; + + editorInput = (AbstractBugEditorInput) input; + repository = editorInput.getRepository(); + connector = (TracRepositoryConnector) TasksUiPlugin.getRepositoryManager().getRepositoryConnector( + repository.getKind()); + + setSite(site); + setInput(input); + + taskOutlineModel = RepositoryTaskOutlineNode.parseBugReport(editorInput.getRepositoryTaskData()); + + isDirty = false; + updateEditorTitle(); + } + + @Override + protected void submitBug() { + if (isDirty()) { + this.doSave(new NullProgressMonitor()); + } + updateBug(); + submitButton.setEnabled(false); + showBusy(true); + + final TracTicket ticket; + try { + ticket = getTracTicket(); + } catch (InvalidTicketException e) { + TracUiPlugin.handleTracException(e); + return; + } + final String comment = getNewCommentText(); + final AbstractRepositoryTask task = (AbstractRepositoryTask) TasksUiPlugin.getTaskListManager().getTaskList() + .getTask(AbstractRepositoryTask.getHandle(repository.getUrl(), getRepositoryTaskData().getId())); + + + JobChangeAdapter listener = new JobChangeAdapter() { + public void done(final IJobChangeEvent event) { + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + public void run() { + if (event.getJob().getResult().isOK()) { + if (getAttachContext()) { + // TODO should be done as part of job + try { + connector.attachContext(repository, (AbstractRepositoryTask) task, ""); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + close(); + } else { + TracUiPlugin.handleTracException(event.getResult()); + } + } + }); + } + }; + + Job submitJob = new Job(SUBMIT_JOB_LABEL) { + + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + ITracClient server = connector.getClientManager().getRepository(repository); + server.updateTicket(ticket, comment); + // XXX hack to avoid message about lost changes to local task + task.setTaskData(null); + connector.synchronize(task, true, null); + return Status.OK_STATUS; + } catch (Exception e) { + return TracUiPlugin.toStatus(e); + } + } + + }; + + submitJob.addJobChangeListener(listener); + submitJob.schedule(); + + } + + @Override + protected void updateBug() { + getRepositoryTaskData().setHasLocalChanges(true); + } + + @Override + protected void validateInput() { + } + + TracTicket getTracTicket() throws InvalidTicketException { + RepositoryTaskData data = getRepositoryTaskData(); + TracTicket ticket = new TracTicket(Integer.parseInt(data.getId())); + List<RepositoryTaskAttribute> attributes = data.getAttributes(); + for (RepositoryTaskAttribute attribute : attributes) { + ticket.putValue(attribute.getID(), attribute.getValue()); + } + return ticket; + } + +} 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 new file mode 100644 index 000000000..73b103643 --- /dev/null +++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * 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 org.eclipse.mylar.context.core.MylarStatusHandler; +import org.eclipse.mylar.internal.tasks.ui.ITaskEditorFactory; +import org.eclipse.mylar.internal.tasks.ui.editors.MylarTaskEditor; +import org.eclipse.mylar.internal.trac.TracRepositoryConnector; +import org.eclipse.mylar.internal.trac.TracTask; +import org.eclipse.mylar.internal.trac.TracUiPlugin; +import org.eclipse.mylar.tasks.core.ITask; +import org.eclipse.mylar.tasks.core.TaskRepository; +import org.eclipse.mylar.tasks.ui.TasksUiPlugin; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; + +/** + * @author Steffen Pingel + */ +public class TracTaskEditorFactory implements ITaskEditorFactory { + + public boolean canCreateEditorFor(ITask task) { + if (task instanceof TracTask) { + TracRepositoryConnector connector = (TracRepositoryConnector) TasksUiPlugin.getRepositoryManager().getRepositoryConnector( + TracUiPlugin.REPOSITORY_KIND); + return connector.hasRichEditor((TracTask) task); + } + return task instanceof TracTask; + } + + public boolean canCreateEditorFor(IEditorInput input) { + if (input instanceof TracTaskEditorInput) { + return ((TracTaskEditorInput) input).getRepositoryTaskData() != null; + } + return false; + } + + public IEditorPart createEditor(MylarTaskEditor parentEditor) { + return new TracTaskEditor(parentEditor); + } + + public IEditorInput createEditorInput(ITask task) { + TracTask tracTask = (TracTask) task; + TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository( + TracUiPlugin.REPOSITORY_KIND, tracTask.getRepositoryUrl()); + try { + return new TracTaskEditorInput(repository, tracTask); + } catch (Exception e) { + MylarStatusHandler.fail(e, "Could not create Trac editor input", true); + } + return null; + } + + public String getTitle() { + return "Trac"; + } + + public void notifyEditorActivationChange(IEditorPart editor) { + // TODO Auto-generated method stub + + } + + public boolean providesOutline() { + return true; + } + +} diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java new file mode 100644 index 000000000..7d8d045e8 --- /dev/null +++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * 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.io.IOException; +import java.security.GeneralSecurityException; + +import org.eclipse.mylar.internal.tasks.ui.editors.ExistingBugEditorInput; +import org.eclipse.mylar.internal.trac.TracTask; +import org.eclipse.mylar.tasks.core.AbstractRepositoryTask; +import org.eclipse.mylar.tasks.core.TaskRepository; + +/** + * @author Steffen Pingel + */ +public class TracTaskEditorInput extends ExistingBugEditorInput { + + public TracTaskEditorInput(TaskRepository repository, TracTask task) throws IOException, GeneralSecurityException { + super(repository, task.getTaskData(), AbstractRepositoryTask.getTaskId(task.getHandleIdentifier())); + // TODO Auto-generated constructor stub + } + + public String getName() { + // TODO fix super implementation + return repositoryTask.getDescription(); + } + +} |