refactoring pycharm educational first iteration
extracted course-creator (language independent) and course-creator-python modules
@@ -1,86 +0,0 @@
|
||||
<idea-plugin version="2">
|
||||
<id>org.jetbrains.plugins.coursecreator</id>
|
||||
<name>Course Creator for PyCharm Educational</name>
|
||||
<version>1.2</version>
|
||||
|
||||
<description><![CDATA[
|
||||
Plugin allows you to create new course for PyCharm Education Edition.
|
||||
]]></description>
|
||||
|
||||
<change-notes><![CDATA[
|
||||
]]>
|
||||
</change-notes>
|
||||
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Build+Number+Ranges for description -->
|
||||
|
||||
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
|
||||
on how to target different products -->
|
||||
<!-- uncomment to enable plugin in all products
|
||||
<depends>com.intellij.modules.lang</depends>
|
||||
-->
|
||||
|
||||
<depends>com.intellij.modules.python</depends>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<directoryProjectGenerator implementation="org.jetbrains.plugins.coursecreator.CCProjectGenerator"/>
|
||||
<projectService serviceImplementation="org.jetbrains.plugins.coursecreator.CCProjectService"/>
|
||||
<treeStructureProvider implementation="org.jetbrains.plugins.coursecreator.projectView.CCTreeStructureProvider"/>
|
||||
<fileTypeFactory implementation="org.jetbrains.plugins.coursecreator.CCAnswerFileTypeFactory" />
|
||||
<refactoring.elementListenerProvider implementation="org.jetbrains.plugins.coursecreator.CCRefactoringElementListenerProvider"/>
|
||||
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
|
||||
</extensions>
|
||||
|
||||
<extensions defaultExtensionNs="PythonidEdu">
|
||||
<executeFile implementation="org.jetbrains.plugins.coursecreator.CCRunTests"/>
|
||||
</extensions>
|
||||
|
||||
<application-components>
|
||||
<!-- Add your application components here -->
|
||||
</application-components>
|
||||
|
||||
<project-components>
|
||||
<!-- Add your project components here -->
|
||||
<component>
|
||||
<implementation-class>org.jetbrains.plugins.coursecreator.CCProjectComponent</implementation-class>
|
||||
</component>
|
||||
</project-components>
|
||||
|
||||
<actions>
|
||||
<action id="CreateLesson" class="org.jetbrains.plugins.coursecreator.actions.CCCreateLesson">
|
||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
|
||||
</action>
|
||||
<action id="ChangeCourseInfo" class="org.jetbrains.plugins.coursecreator.actions.CCChangeCourseInfo">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="PackCourse"/>
|
||||
</action>
|
||||
<action id="CreateTaskFile" class="org.jetbrains.plugins.coursecreator.actions.CCCreateTaskFile">
|
||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
|
||||
</action>
|
||||
<action id="CreateTask" class="org.jetbrains.plugins.coursecreator.actions.CCCreateTask">
|
||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
|
||||
</action>
|
||||
<action id="AddTaskWindow" class="org.jetbrains.plugins.coursecreator.actions.CCAddTaskWindow">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="CopyReference"/>
|
||||
</action>
|
||||
<action id="ShowTaskWindowDetails" class="org.jetbrains.plugins.coursecreator.actions.CCShowTaskWindowDetails">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="CopyReference"/>
|
||||
</action>
|
||||
<action id="DeleteTaskWindow" class="org.jetbrains.plugins.coursecreator.actions.CCDeleteTaskWindow">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="CopyReference"/>
|
||||
</action>
|
||||
<action id="ShowPreview" class="org.jetbrains.plugins.coursecreator.actions.CCShowPreview">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="first"/>
|
||||
</action>
|
||||
<action id="RenameLesson" class="org.jetbrains.plugins.coursecreator.actions.CCRenameLesson">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="CutCopyPasteGroup"/>
|
||||
</action>
|
||||
<action id="RenameTask" class="org.jetbrains.plugins.coursecreator.actions.CCRenameTask">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="CutCopyPasteGroup"/>
|
||||
</action>
|
||||
<action id="PackCourse" class="org.jetbrains.plugins.coursecreator.actions.CCCreateCourseArchive">
|
||||
<add-to-group group-id="MainToolBar" anchor="last" />
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="CutCopyPasteGroup"/>
|
||||
<add-to-group group-id="FileMenu" relative-to-action="FileMainSettingsGroup" anchor="before"/>
|
||||
</action>
|
||||
<action id="CCRunTests" class="org.jetbrains.plugins.coursecreator.actions.CCRunTestsAction" text="Run Tests" description="Run tests"/>
|
||||
</actions>
|
||||
|
||||
</idea-plugin>
|
||||
|
Before Width: | Height: | Size: 500 B |
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
|
||||
import com.jetbrains.python.PythonFileType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CCAnswerFileType extends PythonFileType {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getDefaultExtension() {
|
||||
return "answer";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Answer file";
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Answer";
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.jetbrains.python.edu.PyExecuteFileExtensionPoint;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.actions.CCRunTestsAction;
|
||||
|
||||
public class CCRunTests implements PyExecuteFileExtensionPoint {
|
||||
|
||||
@NotNull
|
||||
public AnAction getRunAction() {
|
||||
return new CCRunTestsAction();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,7 +17,7 @@
|
||||
<orderEntry type="module" module-name="python-educational" />
|
||||
<orderEntry type="module" module-name="learn-python" />
|
||||
<orderEntry type="module" module-name="course-creator" />
|
||||
<orderEntry type="module" module-name="course-creator-python" />
|
||||
<orderEntry type="module" module-name="hg4idea" />
|
||||
</component>
|
||||
</module>
|
||||
|
||||
</module>
|
||||
@@ -9,11 +9,10 @@
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="python-community" />
|
||||
<orderEntry type="module" module-name="course-creator" />
|
||||
<orderEntry type="module" module-name="lang-impl" />
|
||||
<orderEntry type="library" name="gson" level="project" />
|
||||
<orderEntry type="module" module-name="python-ide-community" />
|
||||
<orderEntry type="module" module-name="python-community" />
|
||||
<orderEntry type="module" module-name="testFramework" scope="TEST" />
|
||||
<orderEntry type="module" module-name="python-educational" />
|
||||
<orderEntry type="module" module-name="python-ide-community" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,43 @@
|
||||
<idea-plugin version="2">
|
||||
<id>com.jetbrains.edu.coursecreator.python</id>
|
||||
<name>Course Creator for PyCharm Educational</name>
|
||||
<version>2.0</version>
|
||||
|
||||
<description><![CDATA[
|
||||
Plugin allows you to create new course for PyCharm Education Edition.
|
||||
]]></description>
|
||||
|
||||
<change-notes><![CDATA[
|
||||
]]>
|
||||
</change-notes>
|
||||
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Build+Number+Ranges for description -->
|
||||
|
||||
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
|
||||
on how to target different products -->
|
||||
<!-- uncomment to enable plugin in all products
|
||||
<depends>com.intellij.modules.lang</depends>
|
||||
-->
|
||||
|
||||
<depends>com.intellij.modules.platform</depends>
|
||||
<depends>com.intellij.modules.python</depends>
|
||||
<depends>com.jetbrains.edu.coursecreator</depends>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<directoryProjectGenerator implementation="com.jetbrains.edu.coursecreator.PyCCProjectGenerator"/>
|
||||
<fileTypeFactory implementation="com.jetbrains.edu.coursecreator.PyCCAnswerFileTypeFactory" />
|
||||
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
|
||||
</extensions>
|
||||
|
||||
<application-components>
|
||||
<!-- Add your application components here -->
|
||||
</application-components>
|
||||
|
||||
<project-components>
|
||||
<!-- Add your project components here -->
|
||||
</project-components>
|
||||
|
||||
<actions>
|
||||
<action id="CCRunTests" class="com.jetbrains.edu.coursecreator.actions.PyCCRunTestsAction" text="Run Tests" description="Run tests"/>
|
||||
</actions>
|
||||
|
||||
</idea-plugin>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -13,16 +13,17 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
|
||||
import com.intellij.openapi.fileTypes.FileTypeConsumer;
|
||||
import com.intellij.openapi.fileTypes.FileTypeFactory;
|
||||
import com.jetbrains.python.PythonFileType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CCAnswerFileTypeFactory extends FileTypeFactory {
|
||||
public class PyCCAnswerFileTypeFactory extends FileTypeFactory {
|
||||
@Override
|
||||
public void createFileTypes(@NotNull FileTypeConsumer fileTypeConsumer) {
|
||||
fileTypeConsumer.consume(CCAnswerFileType.INSTANCE, "answer");
|
||||
fileTypeConsumer.consume(PythonFileType.INSTANCE, "answer");
|
||||
}
|
||||
}
|
||||
@@ -1,34 +1,24 @@
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.facet.ui.FacetEditorValidator;
|
||||
import com.intellij.facet.ui.FacetValidatorsManager;
|
||||
import com.intellij.facet.ui.ValidationResult;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.ide.util.DirectoryUtil;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.platform.DirectoryProjectGenerator;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.jetbrains.edu.coursecreator.ui.CCNewProjectPanel;
|
||||
import com.jetbrains.python.newProject.PythonProjectGenerator;
|
||||
import icons.CourseCreatorIcons;
|
||||
import icons.CourseCreatorPythonIcons;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.actions.CCCreateLesson;
|
||||
import org.jetbrains.plugins.coursecreator.actions.CCCreateTask;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.ui.CCNewProjectPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
|
||||
public class CCProjectGenerator extends PythonProjectGenerator implements DirectoryProjectGenerator {
|
||||
public class PyCCProjectGenerator extends PythonProjectGenerator implements DirectoryProjectGenerator {
|
||||
private CCNewProjectPanel mySettingsPanel;
|
||||
|
||||
@Nls
|
||||
@@ -47,34 +37,15 @@ public class CCProjectGenerator extends PythonProjectGenerator implements Direct
|
||||
@Nullable
|
||||
@Override
|
||||
public Icon getLogo() {
|
||||
return CourseCreatorIcons.CourseCreationProjectType;
|
||||
return CourseCreatorPythonIcons.CourseCreationProjectType;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void generateProject(@NotNull final Project project, @NotNull final VirtualFile baseDir,
|
||||
@Nullable Object settings, @NotNull Module module) {
|
||||
|
||||
final CCProjectService service = CCProjectService.getInstance(project);
|
||||
final Course course = new Course(mySettingsPanel.getName(), mySettingsPanel.getAuthor(), mySettingsPanel.getDescription());
|
||||
service.setCourse(course);
|
||||
|
||||
final PsiDirectory projectDir = PsiManager.getInstance(project).findDirectory(baseDir);
|
||||
if (projectDir == null) return;
|
||||
new WriteCommandAction.Simple(project) {
|
||||
@Override
|
||||
protected void run() throws Throwable {
|
||||
final FileTemplate template = FileTemplateManager.getInstance(project).getInternalTemplate("test_helper");
|
||||
try {
|
||||
FileTemplateUtil.createFromTemplate(template, "test_helper.py", null, projectDir);
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
}
|
||||
DirectoryUtil.createSubdirectories("hints", projectDir, "\\/");
|
||||
final PsiDirectory lessonDir = CCCreateLesson.createLesson(projectDir, 1, null, null, course);
|
||||
CCCreateTask.createTask(null, project, lessonDir, false);
|
||||
}
|
||||
}.execute();
|
||||
CCProjectGeneratorUtil.generateProject(project, baseDir, mySettingsPanel.getName(),
|
||||
mySettingsPanel.getAuthor(), mySettingsPanel.getDescription());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.ProgramRunnerUtil;
|
||||
import com.intellij.execution.RunManager;
|
||||
import com.intellij.execution.RunnerAndConfigurationSettings;
|
||||
import com.intellij.execution.configurations.ConfigurationFactory;
|
||||
import com.intellij.execution.executors.DefaultRunExecutor;
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.jetbrains.python.run.PythonConfigurationType;
|
||||
import com.jetbrains.python.run.PythonRunConfiguration;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PyCCRunTestsAction extends CCRunTestsAction {
|
||||
|
||||
@Override
|
||||
protected void executeTests(@NotNull final Project project,
|
||||
@NotNull final VirtualFile virtualFile,
|
||||
@NotNull final VirtualFile taskDir,
|
||||
@NotNull final VirtualFile testFile) {
|
||||
final ConfigurationFactory factory = PythonConfigurationType.getInstance().getConfigurationFactories()[0];
|
||||
final RunnerAndConfigurationSettings settings =
|
||||
RunManager.getInstance(project).createRunConfiguration("test", factory);
|
||||
|
||||
final PythonRunConfiguration configuration = (PythonRunConfiguration)settings.getConfiguration();
|
||||
configuration.setScriptName(testFile.getPath());
|
||||
VirtualFile userFile = taskDir.findChild(virtualFile.getNameWithoutExtension() + ".py");
|
||||
if (userFile == null) {
|
||||
return;
|
||||
}
|
||||
VirtualFile ideaDir = project.getBaseDir().findChild(".idea");
|
||||
if (ideaDir == null) {
|
||||
return;
|
||||
}
|
||||
VirtualFileManager.getInstance().refreshWithoutFileWatcher(true);
|
||||
ProjectView.getInstance(project).refresh();
|
||||
VirtualFile courseDir = ideaDir.findChild("course");
|
||||
if (courseDir == null) {
|
||||
return;
|
||||
}
|
||||
configuration.setScriptParameters(PathUtil.toSystemDependentName(courseDir.getPath()) + " " + PathUtil.toSystemDependentName(userFile.getPath()));
|
||||
Executor executor = DefaultRunExecutor.getRunExecutorInstance();
|
||||
ProgramRunnerUtil.executeConfiguration(project, settings, executor);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -8,11 +8,10 @@ import javax.swing.*;
|
||||
* NOTE THIS FILE IS AUTO-GENERATED
|
||||
* DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead
|
||||
*/
|
||||
public class CourseCreatorIcons {
|
||||
public class CourseCreatorPythonIcons {
|
||||
private static Icon load(String path) {
|
||||
return IconLoader.getIcon(path, CourseCreatorIcons.class);
|
||||
return IconLoader.getIcon(path, CourseCreatorPythonIcons.class);
|
||||
}
|
||||
|
||||
public static final Icon CourseCreationProjectType = load("/icons/CourseCreationProjectType.png"); // 32x32
|
||||
public static final Icon Gutter = load("/icons/gutter.png"); // 16x16
|
||||
}
|
||||
@@ -5,11 +5,11 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
import com.jetbrains.edu.coursecreator.actions.CCCreateCourseArchive;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskFile;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskWindow;
|
||||
import org.jdom.input.SAXBuilder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.actions.CCCreateCourseArchive;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskFile;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskWindow;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -25,7 +25,7 @@ public abstract class CCTestCase extends UsefulTestCase {
|
||||
}
|
||||
|
||||
protected String getTestDataPath() {
|
||||
return PythonHelpersLocator.getPythonCommunityPath() + "/edu/course-creator/testData";
|
||||
return PythonHelpersLocator.getPythonCommunityPath() + "/educational_python/course_creator_python/testData";
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="gson" level="project" />
|
||||
<orderEntry type="module" module-name="lang-impl" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,78 @@
|
||||
<idea-plugin version="2">
|
||||
<id>com.jetbrains.edu.coursecreator</id>
|
||||
<name>Course Creator Plugin</name>
|
||||
<version>2.0</version>
|
||||
|
||||
<description><![CDATA[
|
||||
Language independent part for creating courses.
|
||||
]]></description>
|
||||
|
||||
<change-notes><![CDATA[
|
||||
]]>
|
||||
</change-notes>
|
||||
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Build+Number+Ranges for description -->
|
||||
|
||||
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
|
||||
on how to target different products -->
|
||||
<!-- uncomment to enable plugin in all products
|
||||
<depends>com.intellij.modules.lang</depends>
|
||||
-->
|
||||
<depends>com.intellij.modules.platform</depends>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<projectService serviceImplementation="com.jetbrains.edu.coursecreator.CCProjectService"/>
|
||||
<treeStructureProvider implementation="com.jetbrains.edu.coursecreator.projectView.CCTreeStructureProvider"/>
|
||||
<refactoring.elementListenerProvider implementation="com.jetbrains.edu.coursecreator.CCRefactoringElementListenerProvider"/>
|
||||
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
|
||||
</extensions>
|
||||
|
||||
<application-components>
|
||||
<!-- Add your application components here -->
|
||||
</application-components>
|
||||
|
||||
<project-components>
|
||||
<!-- Add your project components here -->
|
||||
<component>
|
||||
<implementation-class>com.jetbrains.edu.coursecreator.CCProjectComponent</implementation-class>
|
||||
</component>
|
||||
</project-components>
|
||||
|
||||
<actions>
|
||||
<action id="CreateLesson" class="com.jetbrains.edu.coursecreator.actions.CCCreateLesson">
|
||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
|
||||
</action>
|
||||
<action id="ChangeCourseInfo" class="com.jetbrains.edu.coursecreator.actions.CCChangeCourseInfo">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="PackCourse"/>
|
||||
</action>
|
||||
<action id="CreateTask" class="com.jetbrains.edu.coursecreator.actions.CCCreateTask">
|
||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
|
||||
</action>
|
||||
<action id="CreateTaskFile" class="com.jetbrains.edu.coursecreator.actions.CCCreateTaskFile">
|
||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
|
||||
</action>
|
||||
<action id="AddTaskWindow" class="com.jetbrains.edu.coursecreator.actions.CCAddTaskWindow">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="CopyReference"/>
|
||||
</action>
|
||||
<action id="ShowTaskWindowDetails" class="com.jetbrains.edu.coursecreator.actions.CCShowTaskWindowDetails">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="CopyReference"/>
|
||||
</action>
|
||||
<action id="DeleteTaskWindow" class="com.jetbrains.edu.coursecreator.actions.CCDeleteTaskWindow">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="before" relative-to-action="CopyReference"/>
|
||||
</action>
|
||||
<action id="ShowPreview" class="com.jetbrains.edu.coursecreator.actions.CCShowPreview">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="first"/>
|
||||
</action>
|
||||
<action id="RenameLesson" class="com.jetbrains.edu.coursecreator.actions.CCRenameLesson">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="CutCopyPasteGroup"/>
|
||||
</action>
|
||||
<action id="RenameTask" class="com.jetbrains.edu.coursecreator.actions.CCRenameTask">
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="CutCopyPasteGroup"/>
|
||||
</action>
|
||||
<action id="PackCourse" class="com.jetbrains.edu.coursecreator.actions.CCCreateCourseArchive">
|
||||
<add-to-group group-id="MainToolBar" anchor="last" />
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="before" relative-to-action="CutCopyPasteGroup"/>
|
||||
<add-to-group group-id="FileMenu" relative-to-action="FileMainSettingsGroup" anchor="before"/>
|
||||
</action>
|
||||
</actions>
|
||||
|
||||
</idea-plugin>
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.event.DocumentAdapter;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.editor.impl.event.DocumentEventImpl;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskFile;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskWindow;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskFile;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskWindow;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.codeInsight.hint.HintManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -12,8 +12,11 @@ import com.intellij.openapi.editor.event.EditorFactoryListener;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Task;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.format.*;
|
||||
|
||||
public class CCEditorFactoryListener implements EditorFactoryListener {
|
||||
@Override
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ProjectComponent;
|
||||
@@ -16,12 +16,12 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileAdapter;
|
||||
import com.intellij.openapi.vfs.VirtualFileEvent;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.jetbrains.edu.coursecreator.actions.CCRunTestsAction;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Task;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.actions.CCRunTestsAction;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
import org.jetbrains.plugins.coursecreator.format.Task;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskFile;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.ide.util.DirectoryUtil;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.jetbrains.edu.coursecreator.actions.CCCreateLesson;
|
||||
import com.jetbrains.edu.coursecreator.actions.CCCreateTask;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
public class CCProjectGeneratorUtil {
|
||||
public static void generateProject(@NotNull final Project project, @NotNull final VirtualFile baseDir,
|
||||
@NotNull final String name, @NotNull final String author,
|
||||
@NotNull final String description) {
|
||||
|
||||
final CCProjectService service = CCProjectService.getInstance(project);
|
||||
final Course course = new Course(name, author, description);
|
||||
service.setCourse(course);
|
||||
|
||||
final PsiDirectory projectDir = PsiManager.getInstance(project).findDirectory(baseDir);
|
||||
if (projectDir == null) return;
|
||||
new WriteCommandAction.Simple(project) {
|
||||
@Override
|
||||
protected void run() throws Throwable {
|
||||
final FileTemplate template = FileTemplateManager.getInstance(project).getInternalTemplate("test_helper");
|
||||
try {
|
||||
FileTemplateUtil.createFromTemplate(template, "test_helper.py", null, projectDir);
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
}
|
||||
DirectoryUtil.createSubdirectories("hints", projectDir, "\\/");
|
||||
final PsiDirectory lessonDir = CCCreateLesson.createLesson(projectDir, 1, null, null, course);
|
||||
CCCreateTask.createTask(null, project, lessonDir, false);
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
@@ -29,10 +29,10 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
import com.jetbrains.edu.coursecreator.format.*;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.format.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
@@ -22,13 +22,13 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.refactoring.listeners.RefactoringElementAdapter;
|
||||
import com.intellij.refactoring.listeners.RefactoringElementListener;
|
||||
import com.intellij.refactoring.listeners.RefactoringElementListenerProvider;
|
||||
import com.jetbrains.edu.coursecreator.actions.CCRunTestsAction;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Task;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.actions.CCRunTestsAction;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
import org.jetbrains.plugins.coursecreator.format.Task;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskFile;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator;
|
||||
package com.jetbrains.edu.coursecreator;
|
||||
|
||||
import com.intellij.ide.projectView.actions.MarkRootActionBase;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
@@ -13,10 +13,10 @@ import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.*;
|
||||
import com.jetbrains.edu.coursecreator.ui.CreateTaskWindowDialog;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.*;
|
||||
import org.jetbrains.plugins.coursecreator.ui.CreateTaskWindowDialog;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
@@ -11,11 +11,11 @@ import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.ui.CCNewProjectPanel;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.ui.CCNewProjectPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
@@ -18,11 +18,11 @@ import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.io.ZipUtil;
|
||||
import com.jetbrains.edu.coursecreator.CCDocumentListener;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.*;
|
||||
import com.jetbrains.edu.coursecreator.ui.CreateCourseArchiveDialog;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCDocumentListener;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.*;
|
||||
import org.jetbrains.plugins.coursecreator.ui.CreateCourseArchiveDialog;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Collections;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.util.DirectoryChooserUtil;
|
||||
@@ -13,11 +13,11 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
|
||||
public class CCCreateLesson extends DumbAwareAction {
|
||||
public CCCreateLesson() {
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
@@ -20,12 +20,12 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.CCUtils;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.CCUtils;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
import org.jetbrains.plugins.coursecreator.format.Task;
|
||||
|
||||
public class CCCreateTask extends DumbAwareAction {
|
||||
public CCCreateTask() {
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
@@ -16,17 +17,16 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import icons.PythonPsiApiIcons;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
import org.jetbrains.plugins.coursecreator.format.Task;
|
||||
|
||||
public class CCCreateTaskFile extends DumbAwareAction {
|
||||
|
||||
public CCCreateTaskFile() {
|
||||
super("Task File", "Create new Task File", PythonPsiApiIcons.PythonFile);
|
||||
super("Task File", "Create new Task File", AllIcons.FileTypes.Text);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -6,11 +6,11 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskFile;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskWindow;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskFile;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskWindow;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.ide.IdeView;
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
@@ -26,9 +26,9 @@ import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
|
||||
public class CCRenameLesson extends CCRename {
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
import org.jetbrains.plugins.coursecreator.format.Task;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Task;
|
||||
|
||||
public class CCRenameTask extends CCRename {
|
||||
public CCRenameTask() {
|
||||
@@ -13,14 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.execution.*;
|
||||
import com.intellij.execution.Location;
|
||||
import com.intellij.execution.actions.ConfigurationContext;
|
||||
import com.intellij.execution.configurations.ConfigurationFactory;
|
||||
import com.intellij.execution.executors.DefaultRunExecutor;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.Presentation;
|
||||
@@ -32,25 +29,21 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.jetbrains.python.run.PythonConfigurationType;
|
||||
import com.jetbrains.python.run.PythonRunConfiguration;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.*;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Map;
|
||||
|
||||
public class CCRunTestsAction extends AnAction {
|
||||
public abstract class CCRunTestsAction extends AnAction {
|
||||
private static final Logger LOG = Logger.getInstance(CCRunTestsAction.class.getName());
|
||||
|
||||
public CCRunTestsAction() {
|
||||
@@ -114,7 +107,7 @@ public class CCRunTestsAction extends AnAction {
|
||||
run(context);
|
||||
}
|
||||
|
||||
public static void run(final @NotNull ConfigurationContext context) {
|
||||
public void run(final @NotNull ConfigurationContext context) {
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -199,34 +192,10 @@ public class CCRunTestsAction extends AnAction {
|
||||
}
|
||||
}
|
||||
|
||||
private static void executeTests(@NotNull final Project project,
|
||||
protected abstract void executeTests(@NotNull final Project project,
|
||||
@NotNull final VirtualFile virtualFile,
|
||||
@NotNull final VirtualFile taskDir,
|
||||
@NotNull final VirtualFile testFile) {
|
||||
final ConfigurationFactory factory = PythonConfigurationType.getInstance().getConfigurationFactories()[0];
|
||||
final RunnerAndConfigurationSettings settings =
|
||||
RunManager.getInstance(project).createRunConfiguration("test", factory);
|
||||
|
||||
final PythonRunConfiguration configuration = (PythonRunConfiguration)settings.getConfiguration();
|
||||
configuration.setScriptName(testFile.getPath());
|
||||
VirtualFile userFile = taskDir.findChild(virtualFile.getNameWithoutExtension() + ".py");
|
||||
if (userFile == null) {
|
||||
return;
|
||||
}
|
||||
VirtualFile ideaDir = project.getBaseDir().findChild(".idea");
|
||||
if (ideaDir == null) {
|
||||
return;
|
||||
}
|
||||
VirtualFileManager.getInstance().refreshWithoutFileWatcher(true);
|
||||
ProjectView.getInstance(project).refresh();
|
||||
VirtualFile courseDir = ideaDir.findChild("course");
|
||||
if (courseDir == null) {
|
||||
return;
|
||||
}
|
||||
configuration.setScriptParameters(PathUtil.toSystemDependentName(courseDir.getPath()) + " " + PathUtil.toSystemDependentName(userFile.getPath()));
|
||||
Executor executor = DefaultRunExecutor.getRunExecutorInstance();
|
||||
ProgramRunnerUtil.executeConfiguration(project, settings, executor);
|
||||
}
|
||||
@NotNull final VirtualFile testFile);
|
||||
|
||||
@Nullable
|
||||
private static Task getTask(@NotNull final Course course, @NotNull final VirtualFile taskDir) {
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
@@ -34,16 +34,15 @@ import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.containers.hash.HashMap;
|
||||
import com.jetbrains.python.PythonFileType;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CCShowPreview extends DumbAwareAction {
|
||||
@@ -118,7 +117,7 @@ public class CCShowPreview extends DumbAwareAction {
|
||||
if (document == null) {
|
||||
return;
|
||||
}
|
||||
final EditorEx createdEditor = (EditorEx)factory.createEditor(document, project, PythonFileType.INSTANCE, true);
|
||||
final EditorEx createdEditor = (EditorEx)factory.createEditor(document, project, userFile, true);
|
||||
Disposer.register(project, new Disposable() {
|
||||
public void dispose() {
|
||||
factory.releaseEditor(createdEditor);
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.*;
|
||||
import com.jetbrains.edu.coursecreator.ui.CreateTaskWindowDialog;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.*;
|
||||
import org.jetbrains.plugins.coursecreator.ui.CreateTaskWindowDialog;
|
||||
|
||||
public class CCShowTaskWindowDetails extends CCTaskWindowAction {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.actions;
|
||||
package com.jetbrains.edu.coursecreator.actions;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
@@ -8,11 +8,11 @@ import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskFile;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskWindow;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskFile;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskWindow;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.format;
|
||||
package com.jetbrains.edu.coursecreator.format;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.format;
|
||||
package com.jetbrains.edu.coursecreator.format;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
@@ -1,8 +1,8 @@
|
||||
package org.jetbrains.plugins.coursecreator.format;
|
||||
package com.jetbrains.edu.coursecreator.format;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.format;
|
||||
package com.jetbrains.edu.coursecreator.format;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.format;
|
||||
package com.jetbrains.edu.coursecreator.format;
|
||||
|
||||
import com.google.gson.annotations.Expose;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -14,8 +14,8 @@ import com.intellij.openapi.editor.markup.TextAttributes;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.projectView;
|
||||
package com.jetbrains.edu.coursecreator.projectView;
|
||||
|
||||
import com.intellij.ide.projectView.PresentationData;
|
||||
import com.intellij.ide.projectView.ViewSettings;
|
||||
@@ -6,11 +6,11 @@ import com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.Course;
|
||||
import com.jetbrains.edu.coursecreator.format.Lesson;
|
||||
import com.jetbrains.edu.coursecreator.format.Task;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.Course;
|
||||
import org.jetbrains.plugins.coursecreator.format.Lesson;
|
||||
import org.jetbrains.plugins.coursecreator.format.Task;
|
||||
|
||||
public class CCDirectoryNode extends PsiDirectoryNode {
|
||||
private final PsiDirectory myValue;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.projectView;
|
||||
package com.jetbrains.edu.coursecreator.projectView;
|
||||
|
||||
import com.intellij.ide.projectView.TreeStructureProvider;
|
||||
import com.intellij.ide.projectView.ViewSettings;
|
||||
@@ -8,9 +8,9 @@ import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.plugins.coursecreator.ui.CCNewProjectPanel">
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.jetbrains.edu.coursecreator.ui.CCNewProjectPanel">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="3" column-count="4" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.ui;
|
||||
package com.jetbrains.edu.coursecreator.ui;
|
||||
|
||||
import com.intellij.facet.ui.FacetValidatorsManager;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -1,10 +1,10 @@
|
||||
package org.jetbrains.plugins.coursecreator.ui;
|
||||
package com.jetbrains.edu.coursecreator.ui;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.jetbrains.edu.coursecreator.actions.CCCreateCourseArchive;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.actions.CCCreateCourseArchive;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.plugins.coursecreator.ui.CreateCourseArchivePanel">
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.jetbrains.edu.coursecreator.ui.CreateCourseArchivePanel">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.ui;
|
||||
package com.jetbrains.edu.coursecreator.ui;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.ui;
|
||||
package com.jetbrains.edu.coursecreator.ui;
|
||||
|
||||
import com.intellij.ide.projectView.ProjectView;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -8,10 +8,10 @@ import com.intellij.openapi.ui.ValidationInfo;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.jetbrains.edu.coursecreator.CCProjectService;
|
||||
import com.jetbrains.edu.coursecreator.format.TaskWindow;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.coursecreator.CCProjectService;
|
||||
import org.jetbrains.plugins.coursecreator.format.TaskWindow;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.*;
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.plugins.coursecreator.ui.CreateTaskWindowPanel">
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.jetbrains.edu.coursecreator.ui.CreateTaskWindowPanel">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="4" column-count="4" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.coursecreator.ui;
|
||||
package com.jetbrains.edu.coursecreator.ui;
|
||||
|
||||
import com.intellij.ui.DocumentAdapter;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||