From 204c87748cd7eaf21e821af673066d9f618c26b6 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Mon, 16 Feb 2015 16:24:24 +0300 Subject: [PATCH] removed redundant tasks map --- .../edu/coursecreator/CCProjectComponent.java | 5 ++-- .../edu/coursecreator/CCProjectService.java | 24 +-------------- .../CCRefactoringElementListenerProvider.java | 2 +- .../actions/CCAddAnswerPlaceholder.java | 2 +- .../actions/CCCreateCourseArchive.java | 30 ++++++++++--------- .../coursecreator/actions/CCCreateTask.java | 4 +-- .../actions/CCCreateTaskFile.java | 4 ++- .../coursecreator/actions/CCRenameTask.java | 4 +-- .../actions/CCRunTestsAction.java | 9 ++++-- .../projectView/CCDirectoryNode.java | 2 +- .../jetbrains/edu/courseFormat/Lesson.java | 12 ++++++++ 11 files changed, 46 insertions(+), 52 deletions(-) diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java index 5c235696cba4..22a5c01969e3 100644 --- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java +++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectComponent.java @@ -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; } diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectService.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectService.java index 18917920a481..42d3e08c9758 100644 --- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectService.java +++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCProjectService.java @@ -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 { - private static final Logger LOG = Logger.getInstance(CCProjectService.class.getName()); private Course myCourse; - //directory path to Task - private Map myTasksMap = new HashMap(); - private static final Map myDocumentListeners = new HashMap(); - public Map getTasksMap() { - return myTasksMap; - } - - public void setTasksMap(Map 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 lessons = course.getLessons(); - for (Map.Entry task : service.getTasksMap().entrySet()) { - final VirtualFile taskDir = LocalFileSystem.getInstance().findFileByPath(task.getKey()); - if (taskDir == null) continue; - for (final Map.Entry 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(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 entry : task.getTaskFiles().entrySet()) { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + createUserFile(project, taskDir, taskDir, entry); + } + }); + } } } generateJson(project); diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java index 872e1de7be71..e4e3e2e36d54 100644 --- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java +++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java @@ -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()); diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java index 2b669f5715e4..4ca408f648c9 100644 --- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java +++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java @@ -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; diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRenameTask.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRenameTask.java index 8460519c22b3..005cb66cb8aa 100644 --- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRenameTask.java +++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRenameTask.java @@ -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; } diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java index 6c6ae92da8b3..1c69540c6945 100644 --- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java +++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java @@ -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; } diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java index 589a26c5f00d..95d671e82f1b 100644 --- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java +++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCDirectoryNode.java @@ -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); diff --git a/python/educational/src/com/jetbrains/edu/courseFormat/Lesson.java b/python/educational/src/com/jetbrains/edu/courseFormat/Lesson.java index 9807e490ea8c..772b190bf289 100644 --- a/python/educational/src/com/jetbrains/edu/courseFormat/Lesson.java +++ b/python/educational/src/com/jetbrains/edu/courseFormat/Lesson.java @@ -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 tasks = getTaskList(); + if (!EduUtils.indexIsValid(index, tasks)) { + return null; + } + return tasks.get(index); + } + }