mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
allow to publish kotlin/java courses to stepik
This commit is contained in:
-4
@@ -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<VirtualFile, ? extends StudyItem> getStudyOrderable(@NotNull final StudyItem item);
|
||||
|
||||
protected abstract PsiDirectory createItemDir(@NotNull final Project project, @NotNull final StudyItem item,
|
||||
|
||||
+2
-5
@@ -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);
|
||||
|
||||
+1
@@ -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()) {
|
||||
|
||||
@@ -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";
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ import java.util.List;
|
||||
|
||||
public class RemoteCourse extends Course {
|
||||
//course type in format "pycharm<version> <language>"
|
||||
@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<Integer> sections;
|
||||
List<Integer> instructors = new ArrayList<>();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<VirtualFile> 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<VirtualFile> 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;
|
||||
}
|
||||
|
||||
+5
-5
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user