diff options
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.java | 96 |
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) { + + } + } +} |