save task on commit

This commit is contained in:
Dmitry Avdeev
2012-01-16 17:48:23 +04:00
parent c4be4f9492
commit dfac8e9fee
4 changed files with 56 additions and 9 deletions
@@ -51,6 +51,8 @@ public abstract class TaskManager {
public abstract Task updateIssue(String id);
public abstract LocalTask[] getLocalTasks();
public abstract LocalTask addTask(Task issue);
public abstract LocalTask createLocalTask(String summary);
@@ -117,7 +117,7 @@ public class SwitchTaskAction extends BaseTaskAction {
}
if (vcsEnabled && !temp.isEmpty()) {
group.addSeparator();
for (int i = 0, tempSize = temp.size(); i < Math.min(tempSize, 5); i++) {
for (int i = 0, tempSize = temp.size(); i < Math.min(tempSize, 15); i++) {
LocalTask task = temp.get(i);
group.add(createActivateTaskAction(manager, project, task, shiftPressed, true));
}
@@ -20,11 +20,16 @@ import com.intellij.openapi.vcs.CheckinProjectPanel;
import com.intellij.openapi.vcs.changes.CommitContext;
import com.intellij.openapi.vcs.checkin.CheckinHandler;
import com.intellij.openapi.vcs.checkin.CheckinHandlerFactory;
import com.intellij.tasks.LocalTask;
import com.intellij.tasks.Task;
import com.intellij.tasks.TaskManager;
import com.intellij.tasks.TaskRepository;
import com.intellij.tasks.context.WorkingContextManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Date;
/**
* @author Dmitry Avdeev
@@ -41,12 +46,23 @@ public class TaskCheckinHandlerFactory extends CheckinHandlerFactory {
final String message = panel.getCommitMessage();
if (message != null) {
final Project project = panel.getProject();
TaskManagerImpl manager = (TaskManagerImpl)TaskManager.getManager(project);
final TaskManagerImpl manager = (TaskManagerImpl)TaskManager.getManager(project);
if (manager.getState().saveContextOnCommit) {
final Task task = findTask(message, manager);
//noinspection SSBasedInspection
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
WorkingContextManager.getInstance(project).saveContext(null, message);
final WorkingContextManager contextManager = WorkingContextManager.getInstance(project);
if (task != null) {
LocalTask localTask = manager.addTask(task);
localTask.setUpdated(new Date());
contextManager.saveContext(localTask);
}
else {
contextManager.saveContext(null, message);
}
}
});
}
@@ -54,4 +70,22 @@ public class TaskCheckinHandlerFactory extends CheckinHandlerFactory {
}
};
}
@Nullable
private static Task findTask(String message, TaskManager manager) {
TaskRepository[] repositories = manager.getAllRepositories();
for (TaskRepository repository : repositories) {
String id = repository.extractId(message);
try {
Task task = repository.findTask(id);
if (task != null) {
return task;
}
}
catch (Exception ignore) {
}
}
return null;
}
}
@@ -278,6 +278,13 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
}
}
@Override
public LocalTask addTask(Task issue) {
LocalTaskImpl task = issue instanceof LocalTaskImpl ? (LocalTaskImpl)issue : new LocalTaskImpl(issue);
addTask(task);
return task;
}
@Override
public LocalTaskImpl createLocalTask(String summary) {
return createTask(LOCAL_TASK_ID_FORMAT.format(myConfig.localTasksCounter++), summary);
@@ -353,7 +360,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
task.setUpdated(new Date());
}
task.setActive(true);
myTasks.put(task.getId(), task);
addTask(task);
if (task.isIssue()) {
StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new Runnable() {
public void run() {
@@ -374,6 +381,10 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
return task;
}
private void addTask(LocalTaskImpl task) {
myTasks.put(task.getId(), task);
}
@Override
public boolean testConnection(final TaskRepository repository) {
@@ -446,7 +457,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
myTasks.clear();
for (LocalTaskImpl task : config.tasks) {
if (!task.isClosed()) {
myTasks.put(task.getId(), task);
addTask(task);
}
}
@@ -555,7 +566,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
LocalTaskImpl defaultTask = myTasks.get(LocalTaskImpl.DEFAULT_TASK_ID);
if (defaultTask == null) {
defaultTask = createDefaultTask();
myTasks.put(defaultTask.getId(), defaultTask);
addTask(defaultTask);
}
// make sure the task is associated with default changelist
LocalChangeList defaultList = myChangeListManager.findChangeList(LocalChangeList.DEFAULT_NAME);
@@ -577,9 +588,9 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
if (!infos.contains(info)) {
String name = localChangeList.getName();
String id = extractId(name);
LocalTask existing = id == null ? myTasks.get(name) : myTasks.get(id);
LocalTaskImpl existing = id == null ? myTasks.get(name) : myTasks.get(id);
if (existing != null) {
((LocalTaskImpl)existing).getChangeLists().add(info);
existing.getChangeLists().add(info);
} else {
LocalTaskImpl task;
if (id == null) {
@@ -590,7 +601,7 @@ public class TaskManagerImpl extends TaskManager implements ProjectComponent, Pe
task.setIssue(true);
}
task.getChangeLists().add(info);
myTasks.put(task.getId(), task);
addTask(task);
}
}
}