fixed typo in configurator
[idea/community.git] / python / edu / interactive-learning-python / src / com / jetbrains / edu / learning / PyStudyInitialConfigurator.java
1 package com.jetbrains.edu.learning;
2
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;
14
15 import java.io.File;
16 import java.io.IOException;
17
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";
24
25   /**
26    * @noinspection UnusedParameters
27    */
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");
36       try {
37         FileUtil.createDirectory(newCourses);
38         copyCourse(file, newCourses);
39         propertiesComponent.setValue(CONFIGURED_V1, "true");
40       }
41       catch (IOException e) {
42         LOG.warn("Couldn't copy bundled courses " + e);
43       }
44     }
45     if (!propertiesComponent.getBoolean(CONFIGURED_V11)) {
46       final File newCourses = new File(PathManager.getConfigPath(), "courses");
47       if (newCourses.exists()) {
48         try {
49           copyCourse(file, newCourses);
50           propertiesComponent.setValue(CONFIGURED_V11, "true");
51         }
52         catch (IOException e) {
53           LOG.warn("Couldn't copy bundled courses " + e);
54         }
55       }
56     }
57     if (!propertiesComponent.getBoolean(CONFIGURED_V2)) {
58       final File newCourses = new File(PathManager.getConfigPath(), "courses");
59       try {
60         File[] children = newCourses.listFiles();
61         if (children != null) {
62           for (File child : children) {
63             FileUtil.delete(child);
64           }
65         }
66         copyCourse(file, newCourses);
67         propertiesComponent.setValue(CONFIGURED_V2, "true");
68       }
69       catch (IOException e) {
70         LOG.warn("Couldn't copy bundled courses " + e);
71       }
72     }
73   }
74
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);
80   }
81
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);
86
87
88       File pluginBaseDir = jarFile.getParentFile();
89       return new File(pluginBaseDir, "courses");
90     }
91
92     return new File(jarPath, "courses");
93   }
94 }