blob: 89613ac7918faf894406325ea7497abe7b429466 [file] [log] [blame]
package com.jetbrains.python.edu.course;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Course {
private static final Logger LOG = Logger.getInstance(Course.class.getName());
public static final String PLAYGROUND_DIR = "Playground";
public List<Lesson> lessons = new ArrayList<Lesson>();
public String description;
public String name;
public String myResourcePath = "";
public String author;
public static final String COURSE_DIR = "course";
public static final String HINTS_DIR = "hints";
public List<Lesson> getLessons() {
return lessons;
}
/**
* Initializes state of course
*/
public void init(boolean isRestarted) {
for (Lesson lesson : lessons) {
lesson.init(this, isRestarted);
}
}
public String getAuthor() {
return author;
}
/**
* Creates course directory in project user created
*
* @param baseDir project directory
* @param resourceRoot directory where original course is stored
*/
public void create(@NotNull final VirtualFile baseDir, @NotNull final File resourceRoot) {
ApplicationManager.getApplication().invokeLater(
new Runnable() {
@Override
public void run() {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < lessons.size(); i++) {
Lesson lesson = lessons.get(i);
lesson.setIndex(i);
lesson.create(baseDir, resourceRoot);
}
baseDir.createChildDirectory(this, PLAYGROUND_DIR);
File[] files = resourceRoot.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return !name.contains(Lesson.LESSON_DIR) && !name.equals("course.json") && !name.equals("hints");
}
});
for (File file: files) {
FileUtil.copy(file, new File(baseDir.getPath(), file.getName()));
}
}
catch (IOException e) {
LOG.error(e);
}
}
});
}
});
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setResourcePath(@NotNull final String resourcePath) {
myResourcePath = resourcePath;
}
public String getResourcePath() {
return myResourcePath;
}
public String getDescription() {
return description;
}
}