blob: bc0b45ed9550a7c30e4808043357a0348e80b125 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
* Eugene Kuleshov - improvements
* David Green - fix for bug 244442
*******************************************************************************/
package org.eclipse.mylyn.tasks.ui;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.mylyn.internal.tasks.ui.Messages;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.IRepositoryElement;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskComment;
import org.eclipse.mylyn.tasks.core.ITaskMapping;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskAttachmentModel;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
import org.eclipse.mylyn.tasks.ui.wizards.ITaskRepositoryPage;
import org.eclipse.mylyn.tasks.ui.wizards.ITaskSearchPage;
import org.eclipse.mylyn.tasks.ui.wizards.TaskAttachmentPage;
/**
* Extend to provide connector-specific UI extensions.
*
* TODO: consider refactoring into extension points
*
* @author Mik Kersten
* @since 2.0
*/
public abstract class AbstractRepositoryConnectorUi {
private static final String LABEL_TASK_DEFAULT = Messages.AbstractRepositoryConnectorUi_Task;
private final boolean customNotificationHandling = false;
/**
* @return the unique type of the repository, e.g. "bugzilla"
*/
public abstract String getConnectorKind();
/**
* @since 3.0
*/
public abstract ITaskRepositoryPage getSettingsPage(TaskRepository taskRepository);
/**
* @param repository
* @param queryToEdit
* can be null
* @since 3.0
*/
public abstract IWizard getQueryWizard(TaskRepository taskRepository, IRepositoryQuery queryToEdit);
/**
* @since 3.0
*/
public abstract IWizard getNewTaskWizard(TaskRepository taskRepository, ITaskMapping selection);
/**
* Override to return a custom task editor ID. If overriding this method the connector becomes responsible for
* showing the additional pages handled by the default task editor. As of Mylyn 2.0M2 these are the Planning and
* Context pages.
*
* @since 3.0
*/
public String getTaskEditorId(ITask repositoryTask) {
return TaskEditor.ID_EDITOR;
}
public abstract boolean hasSearchPage();
/**
* Contributions to the UI legend.
*
* @deprecated use {@link #getLegendElements()} instead
*/
@Deprecated
public List<ITask> getLegendItems() {
return Collections.emptyList();
}
/**
* Contributions to the UI legend.
*
* @since 3.0
*/
public List<LegendElement> getLegendElements() {
return Collections.emptyList();
}
/**
* @param repositoryTask
* can be null
* @since 3.0
*/
public String getTaskKindLabel(ITask task) {
return LABEL_TASK_DEFAULT;
}
/**
* Connector-specific task icons. Not recommended to override unless providing custom icons and kind overlays.
*
* For connectors that have a decorator that they want to reuse, the connector can maintain a reference to the label
* provider and get the descriptor from the images it returns.
*
* @since 3.0
*/
public ImageDescriptor getImageDescriptor(IRepositoryElement element) {
if (element instanceof IRepositoryQuery) {
return TasksUiImages.QUERY;
} else if (element instanceof ITask) {
return TasksUiImages.TASK;
} else {
return null;
}
}
/**
* Task kind overlay, recommended to override with connector-specific overlay.
*
* @since 3.0
*/
public ImageDescriptor getTaskKindOverlay(ITask task) {
return null;
}
/**
* Connector-specific priority icons. Not recommended to override since priority icons are used elsewhere in the
* Task List UI (e.g. filter selection in view menu).
*
* @since 3.0
*/
public ImageDescriptor getTaskPriorityOverlay(ITask task) {
return TasksUiInternal.getPriorityImage(task);
}
/**
* This method is not used anymore.
*
* @return returns null
*/
@Deprecated
public IWizard getAddExistingTaskWizard(TaskRepository repository) {
return null;
}
/**
* @since 3.0
*/
public ITaskSearchPage getSearchPage(TaskRepository repository, IStructuredSelection selection) {
return null;
}
/**
* Override to return a URL that provides the user with an account creation page for the repository
*
* @param taskRepository
* TODO
*/
public String getAccountCreationUrl(TaskRepository taskRepository) {
return null;
}
/**
* Override to return a URL that provides the user with an account management page for the repository
*
* @param taskRepository
* TODO
*/
public String getAccountManagementUrl(TaskRepository taskRepository) {
return null;
}
/**
* Override to return a URL that provides the user with a history page for the task.
*
* @return a url of a page for the history of the task; null, if no history url is available
* @since 3.0
*/
public String getTaskHistoryUrl(TaskRepository taskRepository, ITask task) {
return null;
}
/**
* Override to return a textual reference to a comment, e.g. for Bugzilla this method returns <code>#12</code> for
* comment 12. This reference is used when generating replies to comments
*
* @return a reference to <code>comment</code>; null, if no reference is available
* @since 3.0
*/
public String getReplyText(TaskRepository taskRepository, ITask task, ITaskComment taskComment, boolean includeTask) {
return null;
}
/**
* Returns an array of hyperlinks that link to tasks within <code>text</code>. If <code>index</code> is != -1
* clients may limit the results to hyperlinks found at <code>index</code>. It is legal for clients to always return
* all results.
*
* @param repository
* the task repository, never <code>null</code>
* @param text
* the line of text
* @param index
* the index within <code>text</code>, if -1 return all hyperlinks found in text
* @param textOffset
* the offset of <code>text</code>
* @return an array of hyperlinks, or null if no hyperlinks were found
* @since 2.0
*/
public IHyperlink[] findHyperlinks(TaskRepository repository, String text, int index, int textOffset) {
return null;
}
/**
* @since 3.0
*/
public boolean hasCustomNotifications() {
return customNotificationHandling;
}
/**
* @since 3.0
* @return true if connector doesn't support non-grouping (flattening) of subtasks
*/
public boolean hasStrictSubtaskHierarchy() {
return false;
}
/**
* @since 3.0
*/
public IWizardPage getTaskAttachmentPage(TaskAttachmentModel model) {
return new TaskAttachmentPage(model);
}
}