diff options
author | Leo Dos Santos | 2013-12-16 21:55:32 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2014-01-21 21:11:33 +0000 |
commit | 2ee34447ece6defdc170aea9168145894465dce7 (patch) | |
tree | a514aa0b87b1763d6219cb7b734c4631053c4f03 /org.eclipse.mylyn.tasks.ui | |
parent | f6291e4a1d8816da3f33e9241294dd0102b74e28 (diff) | |
download | org.eclipse.mylyn.tasks-2ee34447ece6defdc170aea9168145894465dce7.tar.gz org.eclipse.mylyn.tasks-2ee34447ece6defdc170aea9168145894465dce7.tar.xz org.eclipse.mylyn.tasks-2ee34447ece6defdc170aea9168145894465dce7.zip |
424188: Task attributes that set META_ATTRIBUTE_MEDIA_TYPE should be
displayed with the correct markup viewer when available.
Change-Id: Iad8f6f1070d6572702c9e5f71aaebcb8c91e776d
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=424188
Signed-off-by: Leo Dos Santos <leo.dos.santos@tasktop.com>
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui')
3 files changed, 46 insertions, 2 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF index cc1abb518..9ae5082bb 100644 --- a/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF +++ b/org.eclipse.mylyn.tasks.ui/META-INF/MANIFEST.MF @@ -31,7 +31,8 @@ Require-Bundle: org.eclipse.ui, org.eclipse.mylyn.commons.workbench;bundle-version="3.8.0", org.eclipse.mylyn.monitor.core;bundle-version="3.8.0", org.eclipse.mylyn.monitor.ui;bundle-version="3.8.0", - org.eclipse.mylyn.tasks.core;bundle-version="3.8.0" + org.eclipse.mylyn.tasks.core;bundle-version="3.8.0", + com.google.guava;bundle-version="12.0.0" Bundle-ActivationPolicy: lazy Bundle-Vendor: %Bundle-Vendor Export-Package: org.eclipse.mylyn.internal.provisional.tasks.ui.wizards;x-internal:=true, diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorExtensions.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorExtensions.java index 5b2c06db3..50d069cff 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorExtensions.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorExtensions.java @@ -12,6 +12,7 @@ package org.eclipse.mylyn.internal.tasks.ui.editors; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; @@ -22,10 +23,14 @@ import org.eclipse.core.runtime.Status; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.tasks.core.TaskRepository; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorExtension; import org.eclipse.mylyn.tasks.ui.editors.TaskEditor; import org.eclipse.ui.IPluginContribution; +import com.google.common.collect.Multimap; +import com.google.common.net.MediaType; + /** * @author David Green */ @@ -35,6 +40,8 @@ public class TaskEditorExtensions { public static final String REPOSITORY_PROPERTY_AVATAR_SUPPORT = "avatarSupport"; //$NON-NLS-1$ + private static final String MARKUP_KEY = "markup"; //$NON-NLS-1$ + private static Map<String, RegisteredTaskEditorExtension> extensionsById = new HashMap<String, RegisteredTaskEditorExtension>(); private static Map<String, String> associationByConnectorKind = new HashMap<String, String>(); @@ -99,6 +106,41 @@ public class TaskEditorExtensions { return null; } + /** + * get a task editor extension for a specific task attribute + * + * @param taskRepository + * @param taskAttribute + * @return the extension, or null if there is none + * @see #getTaskEditorExtension(TaskRepository); + * @since 3.11 + */ + public static AbstractTaskEditorExtension getTaskEditorExtension(TaskRepository taskRepository, + TaskAttribute taskAttribute) { + init(); + String input = taskAttribute.getMetaData().getMediaType(); + if (input != null) { + try { + MediaType media = MediaType.parse(input); + Multimap<String, String> parameters = media.parameters(); + if (parameters.containsKey(MARKUP_KEY)) { + Iterator<String> iter = parameters.get(MARKUP_KEY).iterator(); + String markup = iter.next(); + SortedSet<RegisteredTaskEditorExtension> extensions = getTaskEditorExtensions(); + for (RegisteredTaskEditorExtension extension : extensions) { + if (markup.equals(extension.getName())) { + return extension.getExtension(); + } + } + } + } catch (IllegalArgumentException e) { + StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, String.format( + "Unable to parse markup type for attribute %s", taskAttribute.toString()), e)); //$NON-NLS-1$ + } + } + return getTaskEditorExtension(taskRepository); + } + public static String getTaskEditorExtensionId(TaskRepository taskRepository) { init(); String id = taskRepository.getProperty(REPOSITORY_PROPERTY_EDITOR_EXTENSION); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AttributeEditorFactory.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AttributeEditorFactory.java index 369aae159..040ba78dc 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AttributeEditorFactory.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AttributeEditorFactory.java @@ -101,7 +101,8 @@ public class AttributeEditorFactory { if (serviceLocator != null) { IContextService contextService = (IContextService) serviceLocator.getService(IContextService.class); if (contextService != null) { - AbstractTaskEditorExtension extension = TaskEditorExtensions.getTaskEditorExtension(model.getTaskRepository()); + AbstractTaskEditorExtension extension = TaskEditorExtensions.getTaskEditorExtension( + model.getTaskRepository(), taskAttribute); if (extension != null) { editor = new RichTextAttributeEditor(model, taskRepository, taskAttribute, SWT.MULTI, contextService, extension); |