/** * 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(); Iterator<String> baseMarkupIterator = parameters.get(BASE_MARKUP_KEY).iterator(); String baseMarkup = (baseMarkupIterator.hasNext() ? baseMarkupIterator.next() : ""); // $NON-NLS-1$ SortedSet<RegisteredTaskEditorExtension> extensions = getTaskEditorExtensions(); for (RegisteredTaskEditorExtension extension : extensions) { if (markup.equals(extension.getName()) || baseMarkup.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); }
/** * get a task editor extension for a specific repository * * @param taskRepository * @return the extension, or null if there is none * @see #getDefaultTaskEditorExtension(TaskRepository) */ public static AbstractTaskEditorExtension getTaskEditorExtension(TaskRepository taskRepository) { init(); String extensionId = getTaskEditorExtensionId(taskRepository); if (extensionId != null) { RegisteredTaskEditorExtension taskEditorExtension = extensionsById.get(extensionId); return taskEditorExtension == null ? null : taskEditorExtension.getExtension(); } return null; }
/** * Contributes an extension to the {@link TaskEditor}. * * @param pluginId the id of the contributing plug-in, may be <code>null</code> * @param id the id of the extension, may not be <code>null</code> * @param name the name of the extension that is displayed in the settings page * @param extension the extension implementation */ public static void addTaskEditorExtension( String pluginId, String id, String name, AbstractTaskEditorExtension extension) { Assert.isNotNull(id); RegisteredTaskEditorExtension descriptor = new RegisteredTaskEditorExtension(extension, id, name); descriptor.setPluginId(pluginId); RegisteredTaskEditorExtension previous = extensionsById.put(id, descriptor); if (previous != null) { StatusHandler.log( new Status( IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Duplicate taskEditorExtension id=" //$NON-NLS-1$ + id, null)); } }