a16b3405f37524dfb7b8d6327715e15676f5f2f1
[idea/community.git] / python / edu / learn-python / src / com / jetbrains / python / edu / course / Course.java
1 package com.jetbrains.python.edu.course;
2
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;
9
10 import java.io.File;
11 import java.io.FilenameFilter;
12 import java.io.IOException;
13 import java.util.ArrayList;
14 import java.util.List;
15
16 public class Course {
17
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;
22   public String name;
23   public String myResourcePath = "";
24   public String author;
25   public static final String COURSE_DIR = "course";
26   public static final String HINTS_DIR = "hints";
27
28
29   public List<Lesson> getLessons() {
30     return lessons;
31   }
32
33   /**
34    * Initializes state of course
35    */
36   public void init(boolean isRestarted) {
37     for (Lesson lesson : lessons) {
38       lesson.init(this, isRestarted);
39     }
40   }
41
42   public String getAuthor() {
43     return author;
44   }
45
46   /**
47    * Creates course directory in project user created
48    *
49    * @param baseDir      project directory
50    * @param resourceRoot directory where original course is stored
51    */
52   public void create(@NotNull final VirtualFile baseDir, @NotNull final File resourceRoot,
53                      @NotNull final Project project) {
54     ApplicationManager.getApplication().invokeLater(
55       new Runnable() {
56         @Override
57         public void run() {
58           ApplicationManager.getApplication().runWriteAction(new Runnable() {
59             @Override
60             public void run() {
61               try {
62                 for (int i = 0; i < lessons.size(); i++) {
63                   Lesson lesson = lessons.get(i);
64                   lesson.setIndex(i);
65                   lesson.create(baseDir, resourceRoot, project);
66                 }
67                 baseDir.createChildDirectory(this, SANDBOX_DIR);
68                 File[] files = resourceRoot.listFiles(new FilenameFilter() {
69                   @Override
70                   public boolean accept(File dir, String name) {
71                     return !name.contains(Lesson.LESSON_DIR) && !name.equals("course.json") && !name.equals("hints");
72                   }
73                 });
74                 for (File file : files) {
75                   FileUtil.copy(file, new File(baseDir.getPath(), file.getName()));
76                 }
77               }
78               catch (IOException e) {
79                 LOG.error(e);
80               }
81             }
82           });
83         }
84       });
85   }
86
87   public void setName(String name) {
88     this.name = name;
89   }
90
91   public String getName() {
92     return name;
93   }
94
95   public void setResourcePath(@NotNull final String resourcePath) {
96     myResourcePath = resourcePath;
97   }
98
99   public String getResourcePath() {
100     return myResourcePath;
101   }
102
103   public String getDescription() {
104     return description;
105   }
106 }