diff --git a/python/educational-core/course-creator/resources/META-INF/plugin.xml b/python/educational-core/course-creator/resources/META-INF/plugin.xml index 8fd2e2531208..ede2dfb83d31 100644 --- a/python/educational-core/course-creator/resources/META-INF/plugin.xml +++ b/python/educational-core/course-creator/resources/META-INF/plugin.xml @@ -47,6 +47,12 @@ + + + + + + diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java index 6952f319dcf7..c8af14b57077 100644 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateLesson.java @@ -8,6 +8,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiManager; import com.intellij.util.Function; +import com.jetbrains.edu.coursecreator.creation.CCLessonCreator; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.courseFormat.Course; import com.jetbrains.edu.learning.courseFormat.Lesson; @@ -51,6 +52,10 @@ public class CCCreateLesson extends CCCreateStudyItemActionBase { protected PsiDirectory createItemDir(@NotNull final Project project, @NotNull final StudyItem item, @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory, @NotNull final Course course) { + CCLessonCreator creator = CCLessonCreator.INSTANCE.forLanguage(course.getLanguageById()); + if (creator != null) { + return creator.createLesson(project, item, view, parentDirectory, course); + } final PsiDirectory[] lessonDirectory = new PsiDirectory[1]; ApplicationManager.getApplication().runWriteAction(() -> { lessonDirectory[0] = DirectoryUtil.createSubdirectories(EduNames.LESSON + item.getIndex(), parentDirectory, "\\/"); diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java index 6b4201b22452..6ae62ecd7272 100644 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java @@ -9,6 +9,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.util.Function; import com.jetbrains.edu.coursecreator.CCUtils; +import com.jetbrains.edu.coursecreator.creation.CCTaskCreator; import com.jetbrains.edu.learning.core.EduNames; import com.jetbrains.edu.learning.core.EduUtils; import com.jetbrains.edu.learning.courseFormat.Course; @@ -64,7 +65,10 @@ public class CCCreateTask extends CCCreateStudyItemActionBase { protected PsiDirectory createItemDir(@NotNull final Project project, @NotNull final StudyItem item, @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory, @NotNull final Course course) { - + CCTaskCreator creator = CCTaskCreator.INSTANCE.forLanguage(course.getLanguageById()); + if (creator != null) { + return creator.createTask(project, item, view, parentDirectory, course); + } final Ref taskDirectory = new Ref<>(); ApplicationManager.getApplication().runWriteAction(() -> { String taskDirName = EduNames.TASK + item.getIndex(); diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCLessonCreator.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCLessonCreator.java new file mode 100644 index 000000000000..28ca6e7d25ac --- /dev/null +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCLessonCreator.java @@ -0,0 +1,18 @@ +package com.jetbrains.edu.coursecreator.creation; + +import com.intellij.ide.IdeView; +import com.intellij.lang.LanguageExtension; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDirectory; +import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.courseFormat.StudyItem; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public interface CCLessonCreator { + LanguageExtension INSTANCE = new LanguageExtension<>("Edu.CCLessonCreator"); + + PsiDirectory createLesson(@NotNull final Project project, @NotNull final StudyItem item, + @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory, + @NotNull final Course course); +} diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCTaskCreator.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCTaskCreator.java new file mode 100644 index 000000000000..a4591e1577f1 --- /dev/null +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/creation/CCTaskCreator.java @@ -0,0 +1,18 @@ +package com.jetbrains.edu.coursecreator.creation; + +import com.intellij.ide.IdeView; +import com.intellij.lang.LanguageExtension; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDirectory; +import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.courseFormat.StudyItem; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public interface CCTaskCreator { + LanguageExtension INSTANCE = new LanguageExtension<>("Edu.CCTaskCreator"); + + PsiDirectory createTask(@NotNull final Project project, @NotNull final StudyItem item, + @Nullable final IdeView view, @NotNull final PsiDirectory parentDirectory, + @NotNull final Course course); +}