TextMate like "create file from template" dialogs for ruby and rails file templates
[fedora-idea.git] / lang-impl / src / com / intellij / ide / fileTemplates / actions / CreateFromTemplateActionBase.java
blob578b7b03d908327ad40251c2462ec18ceb94385c
1 package com.intellij.ide.fileTemplates.actions;
3 import com.intellij.ide.IdeView;
4 import com.intellij.ide.fileTemplates.FileTemplate;
5 import com.intellij.ide.fileTemplates.FileTemplateManager;
6 import com.intellij.ide.fileTemplates.ui.CreateFromTemplateDialog;
7 import com.intellij.ide.util.DirectoryChooserUtil;
8 import com.intellij.openapi.actionSystem.*;
9 import com.intellij.openapi.project.Project;
10 import com.intellij.psi.PsiDirectory;
11 import com.intellij.psi.PsiElement;
12 import org.jetbrains.annotations.Nullable;
14 import javax.swing.*;
16 public abstract class CreateFromTemplateActionBase extends AnAction {
18 public CreateFromTemplateActionBase(final String title, final String description, final Icon icon) {
19 super (title,description,icon);
22 public final void actionPerformed(AnActionEvent e){
23 DataContext dataContext = e.getDataContext();
25 IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext);
26 if (view == null) {
27 return;
29 Project project = PlatformDataKeys.PROJECT.getData(dataContext);
31 PsiDirectory dir = DirectoryChooserUtil.getOrChooseDirectory(view);
32 if (dir == null) return;
34 FileTemplate selectedTemplate = getTemplate(project, dir);
35 if(selectedTemplate != null){
36 AnAction action = getReplacedAction(selectedTemplate);
37 if (action != null) {
38 action.actionPerformed(e);
40 else {
41 FileTemplateManager.getInstance().addRecentName(selectedTemplate.getName());
42 PsiElement createdElement = new CreateFromTemplateDialog(project, dir, selectedTemplate, getDefaultFileName()).create();
43 if (createdElement != null) {
44 view.selectElement(createdElement);
50 @Nullable
51 protected abstract AnAction getReplacedAction(final FileTemplate selectedTemplate);
53 protected abstract FileTemplate getTemplate(final Project project, final PsiDirectory dir);
55 @Nullable
56 public String getDefaultFileName() {
57 return null;