Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkersten2006-08-24 22:44:34 +0000
committermkersten2006-08-24 22:44:34 +0000
commit94f462b8a7f13d71448051ea86e1100a0c4c5495 (patch)
treeac4a39a6a2206b52b1eb7735da2a7efecc366b87
parent91c1084d9947e1c86e489e1464926d4b0f857536 (diff)
downloadorg.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
-rw-r--r--org.eclipse.mylyn.trac.ui/META-INF/MANIFEST.MF1
-rw-r--r--org.eclipse.mylyn.trac.ui/plugin.xml4
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java181
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java72
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorInput.java34
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();
+ }
+
+}

Back to the top