1 package com.jetbrains.edu.coursecreator.handlers;
3 import com.intellij.ide.projectView.ProjectView;
4 import com.intellij.openapi.actionSystem.CommonDataKeys;
5 import com.intellij.openapi.actionSystem.DataContext;
6 import com.intellij.openapi.editor.Editor;
7 import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
8 import com.intellij.openapi.project.Project;
9 import com.intellij.openapi.ui.Messages;
10 import com.intellij.openapi.util.text.StringUtil;
11 import com.intellij.openapi.vfs.VirtualFile;
12 import com.intellij.psi.PsiDirectory;
13 import com.intellij.psi.PsiElement;
14 import com.intellij.psi.PsiFile;
15 import com.intellij.refactoring.rename.RenameHandler;
16 import com.jetbrains.edu.coursecreator.CCUtils;
17 import com.jetbrains.edu.learning.StudyTaskManager;
18 import com.jetbrains.edu.learning.courseFormat.Course;
19 import com.jetbrains.edu.learning.courseFormat.StudyItem;
20 import org.jetbrains.annotations.NotNull;
22 public abstract class CCRenameHandler implements RenameHandler {
24 public boolean isAvailableOnDataContext(DataContext dataContext) {
25 PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext);
26 if (element == null || !(element instanceof PsiDirectory)) {
29 if (!CCUtils.isCourseCreator(element.getProject())) {
32 VirtualFile directory = ((PsiDirectory)element).getVirtualFile();
33 return isAvailable(directory.getName());
36 protected abstract boolean isAvailable(String name);
39 public boolean isRenaming(DataContext dataContext) {
40 return isAvailableOnDataContext(dataContext);
44 public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) {
45 PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(dataContext);
46 assert element != null;
47 PsiDirectory directory = (PsiDirectory)element;
48 Course course = StudyTaskManager.getInstance(project).getCourse();
52 rename(project, course, directory);
53 ProjectView.getInstance(project).refresh();
54 FileEditorManagerEx managerEx = FileEditorManagerEx.getInstanceEx(project);
55 for (VirtualFile virtualFile : managerEx.getOpenFiles()) {
56 managerEx.updateFilePresentation(virtualFile);
60 protected abstract void rename(@NotNull Project project, @NotNull Course course, @NotNull PsiDirectory directory);
63 protected static void processRename(@NotNull final StudyItem item, String namePrefix, @NotNull final Project project) {
64 String name = item.getName();
65 String text = "Rename " + StringUtil.toTitleCase(namePrefix);
66 String newName = Messages.showInputDialog(project, text + " '" + name + "' to", text, null, name, null);
67 if (newName != null) {
68 item.setName(newName);
73 public void invoke(@NotNull Project project, @NotNull PsiElement[] elements, DataContext dataContext) {
74 invoke(project, null, null, dataContext);