blob: 0d8aaab828e75fa3b8e1ad8a252dea0476501fdd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Frank Becker 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:
* Frank Becker - initial API and implementation
* Tasktop Technologies - improvements
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.mylyn.tasks.core.ITaskComment;
import org.eclipse.mylyn.tasks.core.ITaskMapping;
import org.eclipse.mylyn.tasks.core.TaskMapping;
import org.eclipse.mylyn.tasks.ui.TasksUiImages;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
/**
* @author Frank Becker
* @author Steffen Pingel
*/
public class NewTaskFromSelectionAction extends Action {
public static final String ID = "org.eclipse.mylyn.tasks.ui.actions.newTaskFromSelection"; //$NON-NLS-1$
private ITaskMapping taskMapping;
public NewTaskFromSelectionAction() {
super(Messages.NewTaskFromSelectionAction_New_Task_from_Selection);
setId(ID);
setImageDescriptor(TasksUiImages.TASK_NEW);
}
public ITaskMapping getTaskMapping() {
return taskMapping;
}
public void run(IAction action) {
run();
}
@Override
public void run() {
if (taskMapping == null) {
MessageDialog.openError(null, Messages.NewTaskFromSelectionAction_New_Task_from_Selection, Messages.NewTaskFromSelectionAction_Nothing_selected_to_create_task_from);
return;
}
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
TasksUiUtil.openNewTaskEditor(shell, taskMapping, null);
}
public void selectionChanged(ISelection selection) {
if (selection instanceof TextSelection) {
TextSelection textSelection = (TextSelection) selection;
final String text = textSelection.getText();
if (text != null && text.length() > 0) {
taskMapping = new TaskMapping() {
@Override
public String getDescription() {
return text;
}
};
} else {
taskMapping = null;
}
// } else if (selection instanceof RepositoryTaskSelection) {
// RepositoryTaskSelection repositoryTaskSelection = (RepositoryTaskSelection) selection;
// IRepositoryManager repositoryManager = TasksUi.getRepositoryManager();
// AbstractRepositoryConnector connector = repositoryManager.getRepositoryConnector(repositoryTaskSelection.getRepositoryKind());
//
// TaskComment comment = repositoryTaskSelection.getComment();
// if (comment != null) {
// StringBuilder sb = new StringBuilder();
// sb.append("\n-- Created from Comment --");
// if (connector != null) {
// sb.append("\nURL: ");
// sb.append(connector.getTaskUrl(repositoryTaskSelection.getRepositoryUrl(),
// repositoryTaskSelection.getId()));
// }
// sb.append("\nComment: ");
// sb.append(comment.getNumber());
//
// sb.append("\n\n");
// if (taskSelection != null) {
// // if text was selected, prefer that
// sb.append(taskSelection.getLegacyTaskData().getDescription());
// } else {
// sb.append(comment.getText());
// }
//
// taskSelection = new TaskSelection("", sb.toString());
// } else if (taskSelection != null) {
// StringBuilder sb = new StringBuilder();
// if (connector != null) {
// sb.append("\n-- Created from Task --");
// sb.append("\nURL: ");
// sb.append(connector.getTaskUrl(repositoryTaskSelection.getRepositoryUrl(),
// repositoryTaskSelection.getId()));
// }
//
// sb.append("\n\n");
// sb.append(taskSelection.getLegacyTaskData().getDescription());
//
// taskSelection = new TaskSelection("", sb.toString());
// }
} else if (selection instanceof StructuredSelection) {
Object element = ((StructuredSelection) selection).getFirstElement();
if (element instanceof ITaskComment) {
ITaskComment comment = (ITaskComment) element;
final StringBuilder sb = new StringBuilder();
sb.append("\n" + Messages.NewTaskFromSelectionAction____Created_from_Comment___); //$NON-NLS-1$
if (comment.getUrl() == null) {
sb.append("\n" + Messages.NewTaskFromSelectionAction_URL_); //$NON-NLS-1$
sb.append(comment.getTask().getUrl());
sb.append("\n" + Messages.NewTaskFromSelectionAction_Comment_); //$NON-NLS-1$
sb.append(comment.getNumber());
} else {
sb.append("\n" + Messages.NewTaskFromSelectionAction_URL_); //$NON-NLS-1$
sb.append(comment.getUrl());
}
sb.append("\n\n"); //$NON-NLS-1$
sb.append(comment.getText());
taskMapping = new TaskMapping() {
@Override
public String getDescription() {
return sb.toString();
}
};
}
}
setEnabled(taskMapping != null);
}
}