1 package com.jetbrains.python.edu.course;
3 import com.intellij.openapi.application.ApplicationManager;
4 import com.intellij.openapi.diagnostic.Logger;
5 import com.intellij.openapi.project.Project;
6 import com.intellij.openapi.util.io.FileUtil;
7 import com.intellij.openapi.vfs.VirtualFile;
8 import org.jetbrains.annotations.NotNull;
11 import java.io.FilenameFilter;
12 import java.io.IOException;
13 import java.util.ArrayList;
14 import java.util.List;
18 private static final Logger LOG = Logger.getInstance(Course.class.getName());
19 public static final String SANDBOX_DIR = "Sandbox";
20 public List<Lesson> lessons = new ArrayList<Lesson>();
21 public String description;
23 public String myResourcePath = "";
25 public static final String COURSE_DIR = "course";
26 public static final String HINTS_DIR = "hints";
27 private boolean myUpToDate = false;
30 public List<Lesson> getLessons() {
35 * Initializes state of course
37 public void init(boolean isRestarted) {
38 for (Lesson lesson : lessons) {
39 lesson.init(this, isRestarted);
43 public String getAuthor() {
48 * Creates course directory in project user created
50 * @param baseDir project directory
51 * @param resourceRoot directory where original course is stored
53 public void create(@NotNull final VirtualFile baseDir, @NotNull final File resourceRoot,
54 @NotNull final Project project) {
55 ApplicationManager.getApplication().invokeLater(
59 ApplicationManager.getApplication().runWriteAction(new Runnable() {
63 for (int i = 0; i < lessons.size(); i++) {
64 Lesson lesson = lessons.get(i);
66 lesson.create(baseDir, resourceRoot, project);
68 baseDir.createChildDirectory(this, SANDBOX_DIR);
69 File[] files = resourceRoot.listFiles(new FilenameFilter() {
71 public boolean accept(File dir, String name) {
72 return !name.contains(Lesson.LESSON_DIR) && !name.equals("course.json") && !name.equals("hints");
75 for (File file : files) {
76 FileUtil.copy(file, new File(baseDir.getPath(), file.getName()));
79 catch (IOException e) {
88 public void setName(String name) {
92 public String getName() {
96 public void setResourcePath(@NotNull final String resourcePath) {
97 myResourcePath = resourcePath;
100 public String getResourcePath() {
101 return myResourcePath;
104 public String getDescription() {
108 public boolean isUpToDate() {
112 public void setUpToDate(boolean upToDate) {
113 myUpToDate = upToDate;