summaryrefslogtreecommitdiff
path: root/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java')
-rw-r--r--python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java
new file mode 100644
index 000000000000..601e4fc7cb40
--- /dev/null
+++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java
@@ -0,0 +1,96 @@
+/*
+ * 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.psi.PsiDirectory;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.refactoring.listeners.RefactoringElementAdapter;
+import com.intellij.refactoring.listeners.RefactoringElementListener;
+import com.intellij.refactoring.listeners.RefactoringElementListenerProvider;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+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;
+
+public class CCRefactoringElementListenerProvider implements RefactoringElementListenerProvider {
+ @Nullable
+ @Override
+ public RefactoringElementListener getListener(PsiElement element) {
+ return new CCRenameListener(element);
+ }
+
+
+ static class CCRenameListener extends RefactoringElementAdapter {
+
+ private String myElementName;
+
+ public CCRenameListener(PsiElement element) {
+ if (element instanceof PsiFile) {
+ PsiFile psiFile = (PsiFile)element;
+ myElementName = psiFile.getName();
+ }
+ }
+
+ @Override
+ protected void elementRenamedOrMoved(@NotNull PsiElement newElement) {
+ if (newElement instanceof PsiFile && myElementName != null) {
+ PsiFile psiFile = (PsiFile)newElement;
+ if (myElementName.contains(".answer")) {
+ //this is task file
+ renameTaskFile(psiFile, myElementName);
+ }
+ }
+ }
+
+ private static void renameTaskFile(PsiFile file, String oldName) {
+ PsiDirectory taskDir = file.getContainingDirectory();
+ Course course = CCProjectService.getInstance(file.getProject()).getCourse();
+ if (course == null) {
+ return;
+ }
+ if (taskDir == null || !taskDir.getName().contains("task")) {
+ return;
+ }
+ PsiDirectory lessonDir = taskDir.getParent();
+ if (lessonDir == null || !lessonDir.getName().contains("lesson")) {
+ return;
+ }
+ Lesson lesson = course.getLesson(lessonDir.getName());
+ if (lesson == null) {
+ return;
+ }
+ Task task = lesson.getTask(taskDir.getName());
+ if (task == null) {
+ return;
+ }
+ Map<String, TaskFile> taskFiles = task.getTaskFiles();
+ TaskFile taskFile = task.getTaskFile(oldName);
+ String realTaskFileName = CCProjectService.getRealTaskFileName(oldName);
+ taskFiles.remove(realTaskFileName);
+ taskFiles.put(CCProjectService.getRealTaskFileName(file.getName()), taskFile);
+ }
+
+ @Override
+ public void undoElementMovedOrRenamed(@NotNull PsiElement newElement, @NotNull String oldQualifiedName) {
+
+ }
+ }
+}