blob: 015ff2e6f98db5364b5f675f1488f6998b118ff1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 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
*
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.team.ui;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.mylyn.commons.workbench.WorkbenchUtil;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.team.ui.FocusedTeamUiPlugin;
import org.eclipse.mylyn.internal.team.ui.Messages;
import org.eclipse.mylyn.internal.team.ui.properties.TeamPropertiesLinkProvider;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.swt.widgets.Display;
/**
* Provides static helper method for change sets.
*
* @author Steffen Pingel
* @since 3.5
*/
public class TeamUiUtil {
/**
* Returns a commit comment specific to <code>task</code> and <code>resources</code>. If <code>resources</code> is
* null or the associated projects do not specify a custom commit comment template the global template is used.
* <p>
* This method must be invoked on the UI thread.
*
* @param checkTaskRepository
* if true, a warning dialog is displayed in case <code>task</code> is associated with a different
* repository than any of the <code>resources</code>
* @param task
* the task to generate the commit comment for
* @param resources
* that are being committed or null
* @return a commit comment or an empty string if the user opted to abort generating the commit message
* @since 3.5
*/
public static String getComment(boolean checkTaskRepository, ITask task, IResource[] resources) {
// lookup project specific template
String template = null;
Set<IProject> projects = new HashSet<IProject>();
if (resources != null) {
for (IResource resource : resources) {
IProject project = resource.getProject();
if (project != null && project.isAccessible() && !projects.contains(project)) {
TeamPropertiesLinkProvider provider = new TeamPropertiesLinkProvider();
template = provider.getCommitCommentTemplate(project);
if (template != null) {
break;
}
projects.add(project);
}
}
}
boolean proceed = true;
// prompt if resources do not match task
if (checkTaskRepository) {
boolean unmatchedRepositoryFound = false;
for (IProject project : projects) {
TaskRepository repository = TasksUiPlugin.getDefault().getRepositoryForResource(project);
if (repository != null) {
if (!repository.getRepositoryUrl().equals(task.getRepositoryUrl())) {
unmatchedRepositoryFound = true;
}
}
}
if (unmatchedRepositoryFound) {
if (Display.getCurrent() != null) {
proceed = MessageDialog.openQuestion(WorkbenchUtil.getShell(),
Messages.ContextChangeSet_Mylyn_Change_Set_Management,
Messages.ContextChangeSet_ATTEMPTING_TO_COMMIT_RESOURCE);
} else {
proceed = false;
}
}
}
if (proceed) {
if (template == null) {
template = FocusedTeamUiPlugin.getDefault()
.getPreferenceStore()
.getString(FocusedTeamUiPlugin.COMMIT_TEMPLATE);
}
return FocusedTeamUiPlugin.getDefault().getCommitTemplateManager().generateComment(task, template);
} else {
return ""; //$NON-NLS-1$
}
}
}