Search in sources :

Example 26 with Course

use of com.jetbrains.edu.learning.courseFormat.Course in project intellij-community by JetBrains.

the class EduCCModuleBuilder method createModule.

@NotNull
@Override
public Module createModule(@NotNull ModifiableModuleModel moduleModel) throws InvalidDataException, IOException, ModuleWithNameAlreadyExists, JDOMException, ConfigurationException {
    Module module = super.createModule(moduleModel);
    Project project = module.getProject();
    final Course course = new Course();
    course.setName(myPanel.getName());
    course.setAuthorsAsString(myPanel.getAuthors());
    course.setDescription(myPanel.getDescription());
    LanguageWrapper wrapper = (LanguageWrapper) myLanguageComboBox.getSelectedItem();
    course.setLanguage(wrapper.getLanguage().getID());
    course.setCourseMode(CCUtils.COURSE_MODE);
    File courseDir = new File(StudyProjectGenerator.OUR_COURSES_DIR, myPanel.getName() + "-" + project.getName());
    course.setCourseDirectory(courseDir.getPath());
    Lesson lesson = new Lesson();
    Task task = new Task();
    task.setName("task1");
    lesson.addTask(task);
    lesson.setName("lesson1");
    course.addLesson(lesson);
    course.initCourse(false);
    StudyTaskManager.getInstance(project).setCourse(course);
    EduCourseConfigurator configurator = EduCourseConfigurator.INSTANCE.forLanguage(wrapper.getLanguage());
    if (configurator == null) {
        LOG.error("EduCourseConfigurator for language " + wrapper.getLanguage().getDisplayName() + " not found");
        return module;
    }
    configurator.configureModule(module);
    configurator.createCourseModuleContent(moduleModel, project, course, getModuleFileDirectory());
    return module;
}
Also used : Project(com.intellij.openapi.project.Project) Task(com.jetbrains.edu.learning.courseFormat.Task) EduCourseConfigurator(com.jetbrains.edu.learning.intellij.EduCourseConfigurator) Module(com.intellij.openapi.module.Module) Course(com.jetbrains.edu.learning.courseFormat.Course) File(java.io.File) Lesson(com.jetbrains.edu.learning.courseFormat.Lesson) NotNull(org.jetbrains.annotations.NotNull)

Example 27 with Course

use of com.jetbrains.edu.learning.courseFormat.Course in project intellij-community by JetBrains.

the class CCDirectoryNode method modifyChildNode.

@Nullable
@Override
public AbstractTreeNode modifyChildNode(AbstractTreeNode childNode) {
    final AbstractTreeNode node = super.modifyChildNode(childNode);
    if (node != null)
        return node;
    Object value = childNode.getValue();
    if (value instanceof PsiElement) {
        PsiFile psiFile = ((PsiElement) value).getContainingFile();
        VirtualFile virtualFile = psiFile.getVirtualFile();
        Course course = StudyTaskManager.getInstance(myProject).getCourse();
        if (course == null) {
            return null;
        }
        StudyLanguageManager manager = StudyUtils.getLanguageManager(course);
        if (manager == null) {
            return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings);
        }
        if (!CCUtils.isTestsFile(myProject, virtualFile)) {
            return new CCStudentInvisibleFileNode(myProject, psiFile, myViewSettings);
        }
    }
    return null;
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) AbstractTreeNode(com.intellij.ide.util.treeView.AbstractTreeNode) PsiFile(com.intellij.psi.PsiFile) Course(com.jetbrains.edu.learning.courseFormat.Course) PsiElement(com.intellij.psi.PsiElement) StudyLanguageManager(com.jetbrains.edu.learning.StudyLanguageManager) Nullable(org.jetbrains.annotations.Nullable)

Example 28 with Course

use of com.jetbrains.edu.learning.courseFormat.Course in project intellij-community by JetBrains.

the class CCRenameHandler method invoke.

@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) {
    PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext);
    assert element != null;
    PsiDirectory directory = (PsiDirectory) element;
    Course course = StudyTaskManager.getInstance(project).getCourse();
    if (course == null) {
        return;
    }
    rename(project, course, directory);
    ProjectView.getInstance(project).refresh();
    FileEditorManagerEx managerEx = FileEditorManagerEx.getInstanceEx(project);
    for (VirtualFile virtualFile : managerEx.getOpenFiles()) {
        managerEx.updateFilePresentation(virtualFile);
    }
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) PsiDirectory(com.intellij.psi.PsiDirectory) Course(com.jetbrains.edu.learning.courseFormat.Course) PsiElement(com.intellij.psi.PsiElement) FileEditorManagerEx(com.intellij.openapi.fileEditor.ex.FileEditorManagerEx)

Example 29 with Course

use of com.jetbrains.edu.learning.courseFormat.Course in project intellij-community by JetBrains.

the class CCTaskMoveHandlerDelegate method doMove.

@Override
public void doMove(final Project project, PsiElement[] elements, @Nullable PsiElement targetContainer, @Nullable MoveCallback callback) {
    if (targetContainer == null || !(targetContainer instanceof PsiDirectory)) {
        return;
    }
    PsiDirectory targetDir = (PsiDirectory) targetContainer;
    if (!isTaskDir(targetDir) && !CCUtils.isLessonDir(targetDir)) {
        Messages.showInfoMessage("Tasks can be moved only to other lessons or inside lesson", "Incorrect Target For Move");
        return;
    }
    final Course course = StudyTaskManager.getInstance(project).getCourse();
    final PsiDirectory sourceDirectory = (PsiDirectory) elements[0];
    if (course == null) {
        return;
    }
    final Task taskToMove = EduUtils.getTask(sourceDirectory, course);
    if (taskToMove == null) {
        return;
    }
    if (CCUtils.isLessonDir(targetDir)) {
        //if user moves task to any lesson, this task is inserted as the last task in this lesson
        Lesson targetLesson = course.getLesson(targetDir.getName());
        if (targetLesson == null) {
            return;
        }
        List<Task> taskList = targetLesson.getTaskList();
        moveTask(sourceDirectory, taskToMove, taskList.isEmpty() ? null : taskList.get(taskList.size() - 1), 1, targetDir.getVirtualFile(), targetLesson);
    } else {
        PsiDirectory lessonDir = targetDir.getParent();
        if (lessonDir == null) {
            return;
        }
        Task targetTask = EduUtils.getTask(targetDir, course);
        if (targetTask == null) {
            return;
        }
        final CCMoveStudyItemDialog dialog = new CCMoveStudyItemDialog(project, EduNames.TASK, targetTask.getName());
        dialog.show();
        if (dialog.getExitCode() != DialogWrapper.OK_EXIT_CODE) {
            return;
        }
        moveTask(sourceDirectory, taskToMove, targetTask, dialog.getIndexDelta(), lessonDir.getVirtualFile(), targetTask.getLesson());
    }
}
Also used : Task(com.jetbrains.edu.learning.courseFormat.Task) PsiDirectory(com.intellij.psi.PsiDirectory) Course(com.jetbrains.edu.learning.courseFormat.Course) Lesson(com.jetbrains.edu.learning.courseFormat.Lesson) CCMoveStudyItemDialog(com.jetbrains.edu.coursecreator.ui.CCMoveStudyItemDialog)

Example 30 with Course

use of com.jetbrains.edu.learning.courseFormat.Course in project intellij-community by JetBrains.

the class CCCreateCourseArchive method createCourseArchive.

public static void createCourseArchive(final Project project, Module module, String zipName, String locationDir, boolean showMessage) {
    final Course course = StudyTaskManager.getInstance(project).getCourse();
    if (course == null)
        return;
    final VirtualFile baseDir = project.getBaseDir();
    VirtualFile archiveFolder = CCUtils.generateFolder(project, module, zipName);
    if (archiveFolder == null) {
        return;
    }
    CCLanguageManager manager = CCUtils.getStudyLanguageManager(course);
    if (manager == null) {
        return;
    }
    FileFilter filter = pathname -> !manager.doNotPackFile(pathname);
    for (VirtualFile child : baseDir.getChildren()) {
        String name = child.getName();
        File fromFile = new File(child.getPath());
        if (CCUtils.GENERATED_FILES_FOLDER.equals(name) || Project.DIRECTORY_STORE_FOLDER.equals(name) || name.contains("iml") || manager.doNotPackFile(fromFile)) {
            continue;
        }
        copyChild(archiveFolder, filter, child, fromFile);
    }
    ApplicationManager.getApplication().runWriteAction(new Runnable() {

        @Override
        public void run() {
            archiveFolder.refresh(false, true);
            Course courseCopy = course.copy();
            replaceAnswerFilesWithTaskFiles(courseCopy);
            generateJson(archiveFolder, courseCopy);
            VirtualFileManager.getInstance().refreshWithoutFileWatcher(false);
            packCourse(archiveFolder, locationDir, zipName, showMessage);
            synchronize(project);
        }

        private void replaceAnswerFilesWithTaskFiles(Course courseCopy) {
            for (Lesson lesson : courseCopy.getLessons()) {
                String lessonDirName = EduNames.LESSON + String.valueOf(lesson.getIndex());
                final VirtualFile lessonDir = baseDir.findChild(lessonDirName);
                if (lessonDir == null)
                    continue;
                for (Task task : lesson.getTaskList()) {
                    final VirtualFile taskDir = task.getTaskDir(project);
                    if (taskDir == null)
                        continue;
                    String taskDirName = EduNames.TASK + String.valueOf(task.getIndex());
                    VirtualFile studentFileDir = VfsUtil.findRelativeFile(archiveFolder, lessonDirName, taskDirName);
                    if (studentFileDir == null) {
                        continue;
                    }
                    VirtualFile srcDir = studentFileDir.findChild(EduNames.SRC);
                    if (srcDir != null) {
                        studentFileDir = srcDir;
                    }
                    if (task.hasSubtasks()) {
                        transformSubtaskTestsToTextFiles(studentFileDir);
                    }
                    for (String taskFile : task.getTaskFiles().keySet()) {
                        VirtualFile answerFile = taskDir.findFileByRelativePath(taskFile);
                        if (answerFile == null) {
                            continue;
                        }
                        EduUtils.createStudentFile(this, project, answerFile, studentFileDir, task, 0);
                    }
                }
            }
        }

        private void transformSubtaskTestsToTextFiles(VirtualFile studentFileDir) {
            Condition<VirtualFile> isSubtaskTestFile = file -> CCUtils.isTestsFile(project, file) && file.getName().contains(EduNames.SUBTASK_MARKER);
            List<VirtualFile> subtaskTests = ContainerUtil.filter(Arrays.asList(studentFileDir.getChildren()), isSubtaskTestFile);
            for (VirtualFile subtaskTest : subtaskTests) {
                try {
                    subtaskTest.rename(this, subtaskTest.getNameWithoutExtension() + ".txt");
                } catch (IOException e) {
                    LOG.error(e);
                }
            }
        }
    });
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) ZipOutputStream(java.util.zip.ZipOutputStream) Arrays(java.util.Arrays) VirtualFile(com.intellij.openapi.vfs.VirtualFile) Presentation(com.intellij.openapi.actionSystem.Presentation) EduUsagesCollector(com.jetbrains.edu.learning.statistics.EduUsagesCollector) ContainerUtil(com.intellij.util.containers.ContainerUtil) GsonBuilder(com.google.gson.GsonBuilder) VirtualFileManager(com.intellij.openapi.vfs.VirtualFileManager) ProjectView(com.intellij.ide.projectView.ProjectView) CreateCourseArchiveDialog(com.jetbrains.edu.coursecreator.ui.CreateCourseArchiveDialog) EduUtils(com.jetbrains.edu.learning.core.EduUtils) DialogWrapper(com.intellij.openapi.ui.DialogWrapper) CCLanguageManager(com.jetbrains.edu.coursecreator.CCLanguageManager) Gson(com.google.gson.Gson) Project(com.intellij.openapi.project.Project) Messages(com.intellij.openapi.ui.Messages) CommonDataKeys(com.intellij.openapi.actionSystem.CommonDataKeys) FileUtil(com.intellij.openapi.util.io.FileUtil) Logger(com.intellij.openapi.diagnostic.Logger) Module(com.intellij.openapi.module.Module) Lesson(com.jetbrains.edu.learning.courseFormat.Lesson) StudyTaskManager(com.jetbrains.edu.learning.StudyTaskManager) Task(com.jetbrains.edu.learning.courseFormat.Task) DumbAwareAction(com.intellij.openapi.project.DumbAwareAction) List(java.util.List) java.io(java.io) EduNames(com.jetbrains.edu.learning.core.EduNames) AnActionEvent(com.intellij.openapi.actionSystem.AnActionEvent) ApplicationManager(com.intellij.openapi.application.ApplicationManager) VfsUtil(com.intellij.openapi.vfs.VfsUtil) LangDataKeys(com.intellij.openapi.actionSystem.LangDataKeys) NotNull(org.jetbrains.annotations.NotNull) ZipUtil(com.intellij.util.io.ZipUtil) CCUtils(com.jetbrains.edu.coursecreator.CCUtils) Course(com.jetbrains.edu.learning.courseFormat.Course) Condition(com.intellij.openapi.util.Condition) Condition(com.intellij.openapi.util.Condition) Task(com.jetbrains.edu.learning.courseFormat.Task) CCLanguageManager(com.jetbrains.edu.coursecreator.CCLanguageManager) Lesson(com.jetbrains.edu.learning.courseFormat.Lesson) List(java.util.List) Course(com.jetbrains.edu.learning.courseFormat.Course) VirtualFile(com.intellij.openapi.vfs.VirtualFile)

Aggregations

Course (com.jetbrains.edu.learning.courseFormat.Course)51 Project (com.intellij.openapi.project.Project)26 VirtualFile (com.intellij.openapi.vfs.VirtualFile)21 TaskFile (com.jetbrains.edu.learning.courseFormat.TaskFile)12 PsiDirectory (com.intellij.psi.PsiDirectory)11 Lesson (com.jetbrains.edu.learning.courseFormat.Lesson)10 File (java.io.File)10 IdeView (com.intellij.ide.IdeView)8 Nullable (org.jetbrains.annotations.Nullable)6 Presentation (com.intellij.openapi.actionSystem.Presentation)5 PsiFile (com.intellij.psi.PsiFile)5 Task (com.jetbrains.edu.learning.courseFormat.Task)5 NotNull (org.jetbrains.annotations.NotNull)5 Editor (com.intellij.openapi.editor.Editor)4 PsiElement (com.intellij.psi.PsiElement)4 List (java.util.List)4 AbstractTreeNode (com.intellij.ide.util.treeView.AbstractTreeNode)3 ApplicationManager (com.intellij.openapi.application.ApplicationManager)3 Module (com.intellij.openapi.module.Module)3 ProgressIndicator (com.intellij.openapi.progress.ProgressIndicator)3