save task on commit
authorDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Mon, 16 Jan 2012 12:33:26 +0000 (16:33 +0400)
committerDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Mon, 16 Jan 2012 13:48:23 +0000 (17:48 +0400)
plugins/tasks/tasks-api/src/com/intellij/tasks/TaskManager.java
plugins/tasks/tasks-core/src/com/intellij/tasks/actions/SwitchTaskAction.java
plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskCheckinHandlerFactory.java
plugins/tasks/tasks-core/src/com/intellij/tasks/impl/TaskManagerImpl.java

index 9139b7b85bcbfa144beaedc1d09bce1056afb70f..099ffd5a7ac338eff3694a59322654a524e92042 100644 (file)
@@ -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);
 
index 434ee3d9b798ec35302496186e2bf1656c566d68..ee555ec826b45bea56118c46a3a452b13d281b69 100644 (file)
@@ -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));
       }
index db91fce8a7887a536ad0a8eb9439b4b9937df94b..39697014cd3a7bda5193480e76f7b2a750e917e5 100644 (file)
@@ -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;
+  }
 }
index f881ce53ca45d4763048225bc6a55a41d1aec599..90995167b9ed5f76038a37eac7c961d6e89a111e 100644 (file)
@@ -279,6 +279,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);
         }
       }
     }