From 9fececc695780c5e05ce9f3504b84487a66e6260 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 7 Apr 2017 14:32:33 +0300 Subject: [PATCH] allow to publish kotlin/java courses to stepik --- .../resources/fileTemplates/internal/task.html.ft | 0 .../resources/fileTemplates/internal/task.md.ft | 0 .../actions/CCCreateStudyItemActionBase.java | 4 ---- .../edu/coursecreator/actions/CCCreateTask.java | 7 ++----- .../edu/coursecreator/stepik/CCStepicConnector.java | 1 + .../src/com/jetbrains/edu/learning/core/EduNames.java | 1 - .../edu/learning/courseFormat/RemoteCourse.java | 2 +- .../edu/learning/courseFormat/tasks/Task.java | 7 ++++++- .../jetbrains/edu/learning/stepic/StepicWrappers.java | 8 ++++++-- .../edu/learning/PyEduPluginConfigurator.java | 10 +++++----- 10 files changed, 21 insertions(+), 19 deletions(-) rename python/{educational-python => educational-core}/resources/fileTemplates/internal/task.html.ft (100%) rename python/{educational-python => educational-core}/resources/fileTemplates/internal/task.md.ft (100%) diff --git a/python/educational-python/resources/fileTemplates/internal/task.html.ft b/python/educational-core/resources/fileTemplates/internal/task.html.ft similarity index 100% rename from python/educational-python/resources/fileTemplates/internal/task.html.ft rename to python/educational-core/resources/fileTemplates/internal/task.html.ft diff --git a/python/educational-python/resources/fileTemplates/internal/task.md.ft b/python/educational-core/resources/fileTemplates/internal/task.md.ft similarity index 100% rename from python/educational-python/resources/fileTemplates/internal/task.md.ft rename to python/educational-core/resources/fileTemplates/internal/task.md.ft diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateStudyItemActionBase.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateStudyItemActionBase.java index bad3979442b0..732f6dd904d3 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateStudyItemActionBase.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateStudyItemActionBase.java @@ -47,7 +47,6 @@ public abstract class CCCreateStudyItemActionBase extends DumbAwareAction { createItem(view, project, directory, course); } - @Override public void update(@NotNull AnActionEvent event) { final Presentation presentation = event.getPresentation(); @@ -78,13 +77,11 @@ public abstract class CCCreateStudyItemActionBase extends DumbAwareAction { presentation.setEnabledAndVisible(true); } - @Nullable protected abstract PsiDirectory getParentDir(@NotNull final Project project, @NotNull final Course course, @NotNull final PsiDirectory directory); - @Nullable public PsiDirectory createItem(@Nullable final IdeView view, @NotNull final Project project, @NotNull final PsiDirectory sourceDirectory, @NotNull final Course course) { @@ -106,7 +103,6 @@ public abstract class CCCreateStudyItemActionBase extends DumbAwareAction { protected abstract void addItem(@NotNull final Course course, @NotNull final StudyItem item); - protected abstract Function getStudyOrderable(@NotNull final StudyItem item); protected abstract PsiDirectory createItemDir(@NotNull final Project project, @NotNull final StudyItem item, diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java index f64e54b4a123..892f93ba0399 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java @@ -25,9 +25,6 @@ public class CCCreateTask extends CCCreateStudyItemActionBase { super(EduNames.TASK_TITLED, TITLE, EducationalCoreIcons.Task); } - - - @Nullable @Override protected PsiDirectory getParentDir(@NotNull Project project, @NotNull Course course, @NotNull PsiDirectory directory) { @@ -58,8 +55,8 @@ public class CCCreateTask extends CCCreateStudyItemActionBase { @Override @Nullable protected PsiDirectory createItemDir(@NotNull final Project project, @NotNull final StudyItem item, - @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory, - @NotNull final Course course) { + @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory, + @NotNull final Course course) { EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(course.getLanguageById()); if (configurator != null) { return configurator.createTaskContent(project, (Task)item, view, parentDirectory, course); diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java index c5ac73922cb9..3ce6f33d90cb 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/stepik/CCStepicConnector.java @@ -108,6 +108,7 @@ public class CCStepicConnector { postedCourse.setLessons(course.getLessons(true)); postedCourse.setAuthors(course.getAuthors()); postedCourse.setCourseMode(CCUtils.COURSE_MODE); + postedCourse.setLanguage(course.getLanguageID()); final int sectionId = postModule(postedCourse.getId(), 1, String.valueOf(postedCourse.getName())); int position = 1; for (Lesson lesson : course.getLessons()) { diff --git a/python/educational-core/src/com/jetbrains/edu/learning/core/EduNames.java b/python/educational-core/src/com/jetbrains/edu/learning/core/EduNames.java index 29a0cc2c7470..c2c35a63b217 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/core/EduNames.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/core/EduNames.java @@ -35,7 +35,6 @@ public class EduNames { public static final String WINDOWS_POSTFIX = "_windows"; public static final String ANSWERS_POSTFIX = "_answers"; public static final String USER_TESTS = "userTests"; - public static final String TESTS_FILE = "tests.py"; public static final String TEST_HELPER = "test_helper.py"; public static final String COURSE_META_FILE = "course.json"; diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/RemoteCourse.java b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/RemoteCourse.java index 5ba3b62984c2..40bf6eb65643 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/RemoteCourse.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/RemoteCourse.java @@ -17,7 +17,7 @@ import java.util.List; public class RemoteCourse extends Course { //course type in format "pycharm " - @SerializedName("course_format") private String myType = "pycharm" + EduStepicConnector.CURRENT_VERSION + " Python"; + @SerializedName("course_format") private String myType = "pycharm" + EduStepicConnector.CURRENT_VERSION + " " + getLanguageID(); @SerializedName("is_idea_compatible") private boolean isCompatible = true; List sections; List instructors = new ArrayList<>(); diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java index e3561075e1bf..947b2532a4d7 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/courseFormat/tasks/Task.java @@ -2,12 +2,14 @@ package com.jetbrains.edu.learning.courseFormat.tasks; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; +import com.intellij.lang.Language; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.xmlb.XmlSerializer; import com.intellij.util.xmlb.annotations.Transient; +import com.jetbrains.edu.learning.EduPluginConfigurator; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.*; import com.jetbrains.edu.learning.stepic.EduStepicConnector; @@ -167,9 +169,12 @@ public class Task implements StudyItem { @NotNull public String getTestsText(@NotNull final Project project) { + final Course course = getLesson().getCourse(); + final Language language = course.getLanguageById(); + final EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(language); final VirtualFile taskDir = getTaskDir(project); if (taskDir != null) { - final VirtualFile file = taskDir.findChild(EduNames.TESTS_FILE); + final VirtualFile file = taskDir.findChild(configurator.getTestFileName()); if (file == null) return ""; final Document document = FileDocumentManager.getInstance().getDocument(file); if (document != null) { diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java index 1690b383f063..e7d1eefcdd91 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicWrappers.java @@ -2,13 +2,14 @@ package com.jetbrains.edu.learning.stepic; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; +import com.intellij.lang.Language; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; +import com.jetbrains.edu.learning.EduPluginConfigurator; import com.jetbrains.edu.learning.StudyUtils; -import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.core.EduUtils; import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.Lesson; @@ -136,13 +137,16 @@ public class StepicWrappers { } private static List getTestFiles(@NotNull Task task, @NotNull Project project) { + final Course course = task.getLesson().getCourse(); + final Language language = course.getLanguageById(); + final EduPluginConfigurator configurator = EduPluginConfigurator.INSTANCE.forLanguage(language); List testFiles = new ArrayList<>(); VirtualFile taskDir = task.getTaskDir(project); if (taskDir == null) { return testFiles; } if (!(task instanceof TaskWithSubtasks)) { - VirtualFile testFile = taskDir.findChild(EduNames.TESTS_FILE); + VirtualFile testFile = taskDir.findChild(configurator.getTestFileName()); testFiles.add(testFile); return testFiles; } diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java index cfd453a0e8cc..3bbdd68f95a7 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyEduPluginConfigurator.java @@ -77,10 +77,10 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator { @Override public boolean isTestFile(VirtualFile file) { String name = file.getName(); - if (EduNames.TESTS_FILE.equals(name)) { + if (TESTS_PY.equals(name)) { return true; } - return name.contains(FileUtil.getNameWithoutExtension(EduNames.TESTS_FILE)) && name.contains(EduNames.SUBTASK_MARKER); + return name.contains(FileUtil.getNameWithoutExtension(TESTS_PY)) && name.contains(EduNames.SUBTASK_MARKER); } @Override @@ -94,7 +94,7 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator { ApplicationManager.getApplication().runWriteAction(() -> { try { PsiDirectory taskPsiDir = PsiManager.getInstance(project).findDirectory(taskDir); - FileTemplate testsTemplate = FileTemplateManager.getInstance(project).getInternalTemplate(EduNames.TESTS_FILE); + FileTemplate testsTemplate = FileTemplateManager.getInstance(project).getInternalTemplate(TESTS_PY); if (taskPsiDir == null || testsTemplate == null) { return; } @@ -108,10 +108,10 @@ public class PyEduPluginConfigurator implements EduPluginConfigurator { @NotNull public static String getSubtaskTestsFileName(int index) { - return index == 0 ? EduNames.TESTS_FILE : FileUtil.getNameWithoutExtension(EduNames.TESTS_FILE) + + return index == 0 ? TESTS_PY : FileUtil.getNameWithoutExtension(TESTS_PY) + EduNames.SUBTASK_MARKER + index + "." + - FileUtilRt.getExtension(EduNames.TESTS_FILE); + FileUtilRt.getExtension(TESTS_PY); } @NotNull