blob: e726fc6f99dd2649adf1aa302744c423b403395e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2014 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Eike Stepper - initial API and implementation
* Tasktop Technologies - improvements
*******************************************************************************/
package org.eclipse.mylyn.internal.team.ui.templates;
import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskMapping;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.mylyn.team.ui.AbstractCommitTemplateVariable;
/**
* @author Eike Stepper
* @author Mik Kersten
* @author Steffen Pingel
*/
public class CommitTemplateVariables {
private static String implode(List<String> list, String separator) {
if (list == null) {
return null;
}
StringBuilder builder = new StringBuilder();
for (String cc : list) {
if (builder.length() != 0) {
builder.append(separator);
}
builder.append(cc);
}
return builder.toString();
}
public static class ConnectorTaskPrefix extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
if (task != null) {
AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
task.getConnectorKind());
if (connector != null) {
return connector.getTaskIdPrefix();
}
}
return null;
}
}
public static class RepositoryKind extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
if (task != null) {
return task.getConnectorKind();
}
return null;
}
}
public static class RepositoryUrl extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
if (task != null) {
return task.getRepositoryUrl();
}
return null;
}
}
public static class TaskProduct extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
return taskMapping.getProduct();
}
return null;
}
}
public static class TaskAssignee extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
return taskMapping.getOwner();
}
return null;
}
}
public static class TaskReporter extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
return taskMapping.getReporter();
}
return null;
}
}
public static class TaskResolution extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
return taskMapping.getResolution();
}
return null;
}
}
public static class TaskStatus extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
String status = taskMapping.getTaskStatus();
if (status != null) {
return status.toUpperCase(Locale.ENGLISH);
}
}
if (task != null) {
if (task.isCompleted()) {
return Messages.CommitTemplateVariables_Complete;
} else {
return Messages.CommitTemplateVariables_Incomplete;
}
}
return null;
}
}
public static class TaskCc extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
List<String> list = taskMapping.getCc();
return implode(list, ", "); //$NON-NLS-1$
}
return null;
}
}
public static class TaskKeywords extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
List<String> list = getTaskMapping(task).getKeywords();
return implode(list, ", "); //$NON-NLS-1$
}
return null;
}
}
public static class TaskLastModified extends CommitTemplateDate {
@Override
protected Date getDate(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
return taskMapping.getModificationDate();
}
return null;
}
}
public static class TaskSummary extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
ITaskMapping taskMapping = getTaskMapping(task);
if (taskMapping != null) {
return getTaskMapping(task).getSummary();
}
return ""; //$NON-NLS-1$
}
}
public static class TaskDescription extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
if (task != null) {
return task.getSummary();
}
return ""; //$NON-NLS-1$
}
}
public static class TaskId extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
if (task != null) {
return task.getTaskId();
} else {
return null;
}
}
}
public static class TaskKey extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
if (task != null) {
return task.getTaskKey();
} else {
return null;
}
}
}
public static class TaskNotes extends AbstractCommitTemplateVariable {
@SuppressWarnings("restriction")
@Override
public String getValue(ITask task) {
if (task instanceof AbstractTask) {
return ((AbstractTask) task).getNotes();
} else {
return ""; //$NON-NLS-1$
}
}
}
public static class TaskPriority extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
return task.getPriority();
}
}
public static class TaskType extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
return task.getTaskKind();
}
}
public static class TaskURL extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
AbstractRepositoryConnector connector = TasksUi.getRepositoryConnector(task.getConnectorKind());
TaskRepository repository = TasksUiInternal.getRepository(task);
if (repository != null) {
URL url = connector.getBrowserUrl(repository, task);
if (url != null) {
return url.toString();
}
}
return task.getUrl();
}
}
public static ITaskMapping getTaskMapping(ITask task) {
if (task != null) {
TaskData taskData;
try {
taskData = TasksUi.getTaskDataManager().getTaskData(task);
if (taskData != null) {
AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
task.getConnectorKind());
return connector.getTaskMapping(taskData);
}
} catch (CoreException e) {
// ignore
}
}
return null;
}
/**
* @author Eike Stepper
*/
public static class TaskCompletion extends CommitTemplateDate {
@Override
protected Date getDate(ITask task) {
return task.getCompletionDate();
}
}
/**
* @author Eike Stepper
*/
public static class TaskCreation extends CommitTemplateDate {
@Override
protected Date getDate(ITask task) {
return task.getCreationDate();
}
}
/**
* @author Eike Stepper
*/
public static class TaskReminder extends CommitTemplateDate {
@Override
protected Date getDate(ITask task) {
// TODO: Hide this field?
return ((AbstractTask) task).getScheduledForDate().getStartDate().getTime();
}
}
/**
* @author Eike Stepper
*/
private static abstract class CommitTemplateDate extends AbstractCommitTemplateVariable {
@Override
public String getValue(ITask task) {
java.util.Date date = getDate(task);
return (date != null) ? formatDate(date) : null;
}
protected String formatDate(java.util.Date date) {
return date.toString();
}
protected abstract java.util.Date getDate(ITask task);
}
}