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;
}
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;
}
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);
}
}
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());
}
}
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);
}
}
}
});
}
Aggregations