1 package com.jetbrains.edu.learning;
3 import com.intellij.codeInsight.CodeInsightSettings;
4 import com.intellij.ide.util.PropertiesComponent;
5 import com.intellij.openapi.application.PathManager;
6 import com.intellij.openapi.diagnostic.Logger;
7 import com.intellij.openapi.fileTypes.FileTypeManager;
8 import com.intellij.openapi.project.ex.ProjectManagerEx;
9 import com.intellij.openapi.util.io.FileUtil;
10 import com.intellij.platform.templates.github.ZipUtil;
11 import com.intellij.util.PathUtil;
12 import com.intellij.util.messages.MessageBus;
13 import org.jetbrains.annotations.NonNls;
16 import java.io.IOException;
18 @SuppressWarnings({"UtilityClassWithoutPrivateConstructor", "UtilityClassWithPublicConstructor"})
19 public class PyStudyInitialConfigurator {
20 private static final Logger LOG = Logger.getInstance(PyStudyInitialConfigurator.class.getName());
21 @NonNls private static final String CONFIGURED_V1 = "StudyPyCharm.InitialConfiguration";
22 @NonNls private static final String CONFIGURED_V11 = "StudyPyCharm.InitialConfiguration1.1";
23 @NonNls private static final String CONFIGURED_V2 = "StudyPyCharm.InitialConfiguration2";
26 * @noinspection UnusedParameters
28 public PyStudyInitialConfigurator(MessageBus bus,
29 CodeInsightSettings codeInsightSettings,
30 final PropertiesComponent propertiesComponent,
31 FileTypeManager fileTypeManager,
32 final ProjectManagerEx projectManager) {
33 final File file = new File(getCoursesRoot(), "Introduction to Python.zip");
34 if (!propertiesComponent.getBoolean(CONFIGURED_V1)) {
35 final File newCourses = new File(PathManager.getConfigPath(), "courses");
37 FileUtil.createDirectory(newCourses);
38 copyCourse(file, newCourses);
39 propertiesComponent.setValue(CONFIGURED_V1, "true");
41 catch (IOException e) {
42 LOG.warn("Couldn't copy bundled courses " + e);
45 if (!propertiesComponent.getBoolean(CONFIGURED_V11)) {
46 final File newCourses = new File(PathManager.getConfigPath(), "courses");
47 if (newCourses.exists()) {
49 copyCourse(file, newCourses);
50 propertiesComponent.setValue(CONFIGURED_V11, "true");
52 catch (IOException e) {
53 LOG.warn("Couldn't copy bundled courses " + e);
57 if (!propertiesComponent.getBoolean(CONFIGURED_V2)) {
58 final File newCourses = new File(PathManager.getConfigPath(), "courses");
60 File[] children = newCourses.listFiles();
61 if (children != null) {
62 for (File child : children) {
63 FileUtil.delete(child);
66 copyCourse(file, newCourses);
67 propertiesComponent.setValue(CONFIGURED_V11, "true");
69 catch (IOException e) {
70 LOG.warn("Couldn't copy bundled courses " + e);
75 private static void copyCourse(File bundledCourse, File userCourseDir) throws IOException {
76 String fileName = bundledCourse.getName();
77 String unzippedName = fileName.substring(0, fileName.indexOf("."));
78 File courseDir = new File(userCourseDir, unzippedName);
79 ZipUtil.unzip(null, courseDir, bundledCourse, null, null, true);
82 private static File getCoursesRoot() {
83 @NonNls String jarPath = PathUtil.getJarPathForClass(PyStudyInitialConfigurator.class);
84 if (jarPath.endsWith(".jar")) {
85 final File jarFile = new File(jarPath);
88 File pluginBaseDir = jarFile.getParentFile();
89 return new File(pluginBaseDir, "courses");
92 return new File(jarPath, "courses");