removed redundant tasks map

This commit is contained in:
Ekaterina Tuzova
2015-02-16 16:24:24 +03:00
parent 876aa2a2aa
commit 204c87748c
11 changed files with 46 additions and 52 deletions
@@ -152,12 +152,11 @@ public class CCProjectComponent implements ProjectComponent {
if (lesson == null) {
return;
}
Task task = projectService.getTask(removedFile.getPath());
Task task = lesson.getTask(removedFile.getName());
if (task == null) {
return;
}
lesson.getTaskList().remove(task);
projectService.getTasksMap().remove(removedFile.getPath());
}
private void deleteTaskFile(@NotNull final VirtualFile removedFile) {
@@ -179,7 +178,7 @@ public class CCProjectComponent implements ProjectComponent {
if (lesson == null) {
return;
}
Task task = projectService.getTask(taskDir.getPath());
Task task = lesson.getTask(taskDir.getName());
if (task == null) {
return;
}
@@ -20,14 +20,12 @@ import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.ui.JBColor;
import com.intellij.util.xmlb.XmlSerializerUtil;
import com.jetbrains.edu.EduAnswerPlaceholderPainter;
@@ -48,30 +46,10 @@ import java.util.Map;
}
)
public class CCProjectService implements PersistentStateComponent<CCProjectService> {
private static final Logger LOG = Logger.getInstance(CCProjectService.class.getName());
private Course myCourse;
//directory path to Task
private Map<String, Task> myTasksMap = new HashMap<String, Task>();
private static final Map<Document, EduDocumentListener> myDocumentListeners = new HashMap<Document, EduDocumentListener>();
public Map<String, Task> getTasksMap() {
return myTasksMap;
}
public void setTasksMap(Map<String, Task> tasksMap) {
myTasksMap = tasksMap;
}
public void addTask(@NotNull final Task task, PsiDirectory taskDirectory) {
myTasksMap.put(taskDirectory.getVirtualFile().getPath(), task);
}
public Task getTask(@NotNull final String name) {
return myTasksMap.get(name);
}
@Nullable
public TaskFile getTaskFile(@NotNull final VirtualFile virtualFile) {
VirtualFile taskDir = virtualFile.getParent();
@@ -94,7 +72,7 @@ public class CCProjectService implements PersistentStateComponent<CCProjectServi
if (lesson == null) {
return null;
}
Task task = getTask(taskDir.getPath());
Task task = lesson.getTask(taskDir.getName());
if (task == null) {
return null;
}
@@ -81,7 +81,7 @@ public class CCRefactoringElementListenerProvider implements RefactoringElementL
if (lesson == null) {
return;
}
Task task = service.getTask(taskDir.getVirtualFile().getPath());
Task task = lesson.getTask(taskDir.getName());
if (task == null) {
return;
}
@@ -132,7 +132,7 @@ public class CCAddAnswerPlaceholder extends DumbAwareAction {
presentation.setEnabled(false);
return;
}
final Task task = service.getTask(taskDir.getVirtualFile().getPath());
final Task task = lesson.getTask(taskDir.getName());
if (task == null) {
presentation.setVisible(false);
presentation.setEnabled(false);
@@ -16,7 +16,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.util.io.ZipUtil;
@@ -30,7 +29,7 @@ import com.jetbrains.edu.coursecreator.ui.CreateCourseArchiveDialog;
import org.jetbrains.annotations.NotNull;
import java.io.*;
import java.util.AbstractMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipOutputStream;
@@ -75,19 +74,22 @@ public class CCCreateCourseArchive extends DumbAwareAction {
return;
}
final VirtualFile baseDir = project.getBaseDir();
final List<Lesson> lessons = course.getLessons();
for (Map.Entry<String, Task> task : service.getTasksMap().entrySet()) {
final VirtualFile taskDir = LocalFileSystem.getInstance().findFileByPath(task.getKey());
if (taskDir == null) continue;
for (final Map.Entry<String, TaskFile> entry : task.getValue().getTaskFiles().entrySet()) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
TaskFile taskFileCopy = new TaskFile();
TaskFile.copy(entry.getValue(), taskFileCopy);
createUserFile(project, taskDir, taskDir, new AbstractMap.SimpleEntry<String, TaskFile>(entry.getKey(), taskFileCopy));
}
});
for (Lesson lesson : lessons) {
final VirtualFile lessonDir = baseDir.findChild(EduNames.LESSON + String.valueOf(lesson.getIndex()));
if (lessonDir == null) continue;
for (Task task : lesson.getTaskList()) {
final VirtualFile taskDir = lessonDir.findChild(EduNames.TASK + String.valueOf(task.getIndex()));
if (taskDir == null) continue;
for (final Map.Entry<String, TaskFile> entry : task.getTaskFiles().entrySet()) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
createUserFile(project, taskDir, taskDir, entry);
}
});
}
}
}
generateJson(project);
@@ -83,15 +83,13 @@ public class CCCreateTask extends DumbAwareAction {
EduUtils.markDirAsSourceRoot(taskDirectory.getVirtualFile(), project);
final Task task = new Task(taskName);
task.setIndex(size + 1);
service.addTask(task, taskDirectory);
lesson.addTask(task);
createFromTemplateAndOpen(taskDirectory, manager.getTestsTemplate(project), view);
createFromTemplateAndOpen(taskDirectory, FileTemplateManager.getInstance(project).getInternalTemplate("task.html"), view);
String defaultExtension = manager.getDefaultTaskFileExtension();
if (defaultExtension != null) {
FileTemplate taskFileTemplate = manager.getTaskFileTemplateForExtension(project,
defaultExtension);
FileTemplate taskFileTemplate = manager.getTaskFileTemplateForExtension(project, defaultExtension);
createFromTemplateAndOpen(taskDirectory, taskFileTemplate, view);
if (taskFileTemplate != null) {
String taskFileName = FileUtil.getNameWithoutExtension(taskFileTemplate.getName());
@@ -21,6 +21,7 @@ import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.jetbrains.edu.EduNames;
import com.jetbrains.edu.courseFormat.Course;
import com.jetbrains.edu.courseFormat.Lesson;
import com.jetbrains.edu.courseFormat.Task;
import com.jetbrains.edu.coursecreator.CCLanguageManager;
import com.jetbrains.edu.coursecreator.CCProjectService;
@@ -52,7 +53,8 @@ public class CCCreateTaskFile extends DumbAwareAction {
}
final CCProjectService service = CCProjectService.getInstance(project);
final Course course = service.getCourse();
final Task task = service.getTask(taskDir.getVirtualFile().getPath());
final Lesson lesson = course.getLesson(lessonDir.getName());
final Task task = lesson.getTask(taskDir.getName());
final int index = task.getTaskFiles().size() + 1;
String generatedName = "file" + index;
@@ -22,7 +22,6 @@ import com.jetbrains.edu.EduNames;
import com.jetbrains.edu.courseFormat.Course;
import com.jetbrains.edu.courseFormat.Lesson;
import com.jetbrains.edu.courseFormat.Task;
import com.jetbrains.edu.coursecreator.CCProjectService;
public class CCRenameTask extends CCRename {
public CCRenameTask() {
@@ -40,12 +39,11 @@ public class CCRenameTask extends CCRename {
if (lessonDir == null || !lessonDir.getName().contains(EduNames.LESSON)) {
return false;
}
final CCProjectService service = CCProjectService.getInstance(project);
Lesson lesson = course.getLesson(lessonDir.getName());
if (lesson == null) {
return false;
}
Task task = service.getTask(directory.getVirtualFile().getPath());
Task task = lesson.getTask(directory.getName());
if (task == null) {
return false;
}
@@ -82,7 +82,7 @@ public abstract class CCRunTestsAction extends AnAction {
if (course == null) return;
final Lesson lesson = course.getLesson(lessonDir.getName());
if (lesson == null) return;
final Task task = service.getTask(taskDir.getVirtualFile().getPath());
final Task task = lesson.getTask(taskDir.getName());
if (task == null) {
presentation.setVisible(false);
presentation.setEnabled(false);
@@ -127,7 +127,12 @@ public abstract class CCRunTestsAction extends AnAction {
if (taskDir == null) {
return;
}
final Task task = CCProjectService.getInstance(project).getTask(taskDir.getPath());
VirtualFile lessonDir = taskDir.getParent();
Lesson lesson = course.getLesson(lessonDir.getName());
if (lesson == null) {
return;
}
final Task task = lesson.getTask(taskDir.getName());
if (task == null) {
return;
}
@@ -52,7 +52,7 @@ public class CCDirectoryNode extends PsiDirectoryNode {
if (parentDir != null) {
final Lesson parentLesson = course.getLesson(parentDir.getName());
if (parentLesson != null) {
final Task task = service.getTask(myValue.getVirtualFile().getPath());
final Task task = parentLesson.getTask(valueName);
if (task != null) {
data.clearText();
data.addText(valueName, SimpleTextAttributes.REGULAR_ATTRIBUTES);
@@ -3,6 +3,8 @@ package com.jetbrains.edu.courseFormat;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.intellij.util.xmlb.annotations.Transient;
import com.jetbrains.edu.EduNames;
import com.jetbrains.edu.EduUtils;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -61,4 +63,14 @@ public class Lesson {
public void addTask(@NotNull final Task task) {
taskList.add(task);
}
public Task getTask(@NotNull final String name) {
int index = EduUtils.getIndex(name, EduNames.TASK);
List<Task> tasks = getTaskList();
if (!EduUtils.indexIsValid(index, tasks)) {
return null;
}
return tasks.get(index);
}
}