super(IdeBundle.message("action.create.new.class"), IdeBundle.message("action.create.new.class"), Icons.CLASS_ICON, true);
}
- @NotNull
@Override
- protected CreateFileFromTemplateDialog.Builder buildDialog(Project project, final PsiDirectory directory) {
- final CreateFileFromTemplateDialog.Builder builder = CreateFileFromTemplateDialog.
- createDialog(project, IdeBundle.message("action.create.new.class"));
- builder.addKind("Class", Icons.CLASS_ICON, JavaTemplateUtil.INTERNAL_CLASS_TEMPLATE_NAME);
- builder.addKind("Interface", Icons.INTERFACE_ICON, JavaTemplateUtil.INTERNAL_INTERFACE_TEMPLATE_NAME);
+ protected void buildDialog(Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
+ builder
+ .setTitle(IdeBundle.message("action.create.new.class"))
+ .addKind("Class", Icons.CLASS_ICON, JavaTemplateUtil.INTERNAL_CLASS_TEMPLATE_NAME)
+ .addKind("Interface", Icons.INTERFACE_ICON, JavaTemplateUtil.INTERNAL_INTERFACE_TEMPLATE_NAME);
if (LanguageLevelProjectExtension.getInstance(project).getLanguageLevel().compareTo(LanguageLevel.JDK_1_5) >= 0) {
builder.addKind("Enum", Icons.ENUM_ICON, JavaTemplateUtil.INTERNAL_ENUM_TEMPLATE_NAME);
builder.addKind("Annotation", Icons.ANNOTATION_TYPE_ICON, JavaTemplateUtil.INTERNAL_ANNOTATION_TYPE_TEMPLATE_NAME);
}
- return builder;
}
@Override
private ElementCreator myCreator;
- private CreateFileFromTemplateDialog(@NotNull Project project, @NotNull final String title) {
+ private CreateFileFromTemplateDialog(@NotNull Project project) {
super(project, true);
myKindCombo.setRenderer(new DefaultListCellRenderer() {
}
});
- setTitle(title);
- //myNameLabel.setText(prompt);
+ //myNameLabel.setText(prompt);
new ComboboxSpeedSearch(myKindCombo) {
@Override
return myNameField;
}
- public static <T extends PsiElement> Builder createDialog(@NotNull final Project project, @NotNull final String title) {
- final CreateFileFromTemplateDialog dialog = new CreateFileFromTemplateDialog(project, title);
+ public static <T extends PsiElement> Builder createDialog(@NotNull final Project project) {
+ final CreateFileFromTemplateDialog dialog = new CreateFileFromTemplateDialog(project);
return new Builder() {
+ @Override
+ public Builder setTitle(String title) {
+ dialog.setTitle(title);
+ return this;
+ }
+
public Builder addKind(@NotNull String name, @Nullable Icon icon, @NotNull String templateName) {
dialog.myKindCombo.addItem(new Trinity<String, Icon, String>(name, icon, templateName));
return this;
}
public interface Builder {
+ Builder setTitle(String title);
Builder addKind(@NotNull String kind, @Nullable Icon icon, @NotNull String templateName);
@Nullable
<T extends PsiElement> T show(@NotNull String errorTitle, @Nullable String selectedItem, @NotNull FileCreator<T> creator);
*/
package com.intellij.ide.actions;
+import com.intellij.CommonBundle;
import com.intellij.ide.IdeView;
+import com.intellij.ide.fileTemplates.FileTemplate;
+import com.intellij.ide.fileTemplates.FileTemplateManager;
+import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
* @author Eugene.Kudelevsky
*/
public abstract class CreateFromTemplateAction<T extends PsiElement> extends AnAction {
+ private static final Logger LOG = Logger.getInstance("#com.intellij.ide.actions.CreateFromTemplateAction");
+
public CreateFromTemplateAction(String text, String description, Icon icon) {
super(text, description, icon);
}
+ protected static PsiFile createFileFromTemplate(String name, String templateName, PsiDirectory dir) {
+ final FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate(templateName);
+
+ PsiElement element;
+ try {
+ element = FileTemplateUtil
+ .createFromTemplate(template, name, FileTemplateManager.getInstance().getDefaultProperties(), dir);
+ final PsiFile psiFile = element.getContainingFile();
+
+ final VirtualFile virtualFile = psiFile.getVirtualFile();
+ if (virtualFile != null) {
+ FileEditorManager.getInstance(dir.getProject()).openFile(virtualFile, true);
+ return psiFile;
+ }
+ }
+ catch (IncorrectOperationException e) {
+ throw e;
+ }
+ catch (Exception e) {
+ LOG.error(e);
+ }
+
+ return null;
+ }
+
public final void actionPerformed(final AnActionEvent e) {
final DataContext dataContext = e.getDataContext();
final Project project = PlatformDataKeys.PROJECT.getData(dataContext);
final PsiDirectory dir = view.getOrChooseDirectory();
- if (dir == null) return;
+ if (dir == null || project == null) return;
+
+ final CreateFileFromTemplateDialog.Builder builder = CreateFileFromTemplateDialog.createDialog(project);
+ buildDialog(project, dir, builder);
final T createdElement =
- buildDialog(project, dir).show(getErrorTitle(), getDefaultTempalteName(dir), new CreateFileFromTemplateDialog.FileCreator<T>() {
+ builder.show(getErrorTitle(), getDefaultTemplateName(dir), new CreateFileFromTemplateDialog.FileCreator<T>() {
public void checkBeforeCreate(@NotNull String name, @NotNull String templateName) {
CreateFromTemplateAction.this.checkBeforeCreate(name, templateName, dir);
}
protected abstract void checkBeforeCreate(String name, String templateName, PsiDirectory dir);
- @NotNull
- protected abstract CreateFileFromTemplateDialog.Builder buildDialog(Project project, PsiDirectory directory);
+ protected abstract void buildDialog(Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder);
@Nullable
- protected String getDefaultTempalteName(@NotNull PsiDirectory dir) {
+ protected String getDefaultTemplateName(@NotNull PsiDirectory dir) {
return null;
}
protected abstract String getActionName(PsiDirectory directory, String newName, String templateName);
- protected abstract String getErrorTitle();
+ protected String getErrorTitle() {
+ return CommonBundle.getErrorTitle();
+ }
}
package org.jetbrains.plugins.groovy.actions;
-import com.intellij.CommonBundle;
import com.intellij.ide.actions.CreateFileFromTemplateDialog;
import com.intellij.ide.actions.CreateTemplateInPackageAction;
import com.intellij.openapi.actionSystem.DataContext;
super(GroovyBundle.message("newclass.menu.action.text"), GroovyBundle.message("newclass.menu.action.description"), GroovyIcons.CLASS, true);
}
- @NotNull
@Override
- protected CreateFileFromTemplateDialog.Builder buildDialog(Project project, final PsiDirectory directory) {
- final CreateFileFromTemplateDialog.Builder builder = CreateFileFromTemplateDialog.
- createDialog(project, GroovyBundle.message("newclass.dlg.title"));
- builder.addKind("Class", GroovyIcons.CLASS, "GroovyClass.groovy");
- builder.addKind("Interface", GroovyIcons.INTERFACE, "GroovyInterface.groovy");
- builder.addKind("Enum", GroovyIcons.ENUM, "GroovyEnum.groovy");
- builder.addKind("Annotation", GroovyIcons.ANNOTATION_TYPE, "GroovyAnnotation.groovy");
- return builder;
+ protected void buildDialog(Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
+ builder
+ .setTitle(GroovyBundle.message("newclass.dlg.title"))
+ .addKind("Class", GroovyIcons.CLASS, "GroovyClass.groovy")
+ .addKind("Interface", GroovyIcons.INTERFACE, "GroovyInterface.groovy")
+ .addKind("Enum", GroovyIcons.ENUM, "GroovyEnum.groovy")
+ .addKind("Annotation", GroovyIcons.ANNOTATION_TYPE, "GroovyAnnotation.groovy");
}
@Override
return GroovyBundle.message("newclass.menu.action.text");
}
- protected String getErrorTitle() {
- return CommonBundle.getErrorTitle();
- }
-
@Override
protected PsiElement getNavigationElement(@NotNull GrTypeDefinition createdElement) {
return createdElement.getLBraceGroovy();
package org.jetbrains.plugins.groovy.actions;
-import com.intellij.CommonBundle;
import com.intellij.ide.actions.CreateFileFromTemplateDialog;
import com.intellij.ide.actions.CreateTemplateInPackageAction;
import com.intellij.openapi.actionSystem.DataContext;
super(GroovyBundle.message("newscript.menu.action.text"), GroovyBundle.message("newscript.menu.action.description"), GroovyIcons.GROOVY_ICON_16x16, false);
}
- @NotNull
@Override
- protected CreateFileFromTemplateDialog.Builder buildDialog(Project project, final PsiDirectory directory) {
- final CreateFileFromTemplateDialog.Builder builder = CreateFileFromTemplateDialog.
- createDialog(project, GroovyBundle.message("newscript.dlg.prompt"));
- builder.addKind("Groovy script", GroovyIcons.GROOVY_ICON_16x16, "GroovyScript.groovy");
- builder.addKind("GroovyDSL script", GroovyIcons.GROOVY_ICON_16x16, GROOVY_DSL_SCRIPT_TMPL);
- return builder;
+ protected void buildDialog(Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
+ builder
+ .setTitle(GroovyBundle.message("newscript.dlg.prompt"))
+ .addKind("Groovy script", GroovyIcons.GROOVY_ICON_16x16, "GroovyScript.groovy")
+ .addKind("GroovyDSL script", GroovyIcons.GROOVY_ICON_16x16, GROOVY_DSL_SCRIPT_TMPL);
}
@Override
return GroovyBundle.message("newscript.menu.action.text");
}
- protected String getErrorTitle() {
- return CommonBundle.getErrorTitle();
- }
-
@Override
protected PsiElement getNavigationElement(@NotNull GroovyFile createdFile) {
return createdFile.getLastChild();
*/
package com.intellij.ide.actions;
-import com.intellij.CommonBundle;
-import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager;
-import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
-import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
-import com.intellij.util.IncorrectOperationException;
import com.intellij.xml.XmlBundle;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
protected PsiFile createFile(String name, String templateName, PsiDirectory dir) {
PropertiesComponent.getInstance(dir.getProject()).setValue(DEFAULT_HTML_TEMPLATE_PROPERTY, templateName);
- final FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate(templateName);
-
- PsiElement element;
- try {
- element = FileTemplateUtil
- .createFromTemplate(template, name, FileTemplateManager.getInstance().getDefaultProperties(), dir);
- final PsiFile psiFile = element.getContainingFile();
-
- final VirtualFile virtualFile = psiFile.getVirtualFile();
- if (virtualFile != null) {
- FileEditorManager.getInstance(dir.getProject()).openFile(virtualFile, true);
- return psiFile;
- }
- }
- catch (IncorrectOperationException e) {
- throw e;
- }
- catch (Exception e) {
- LOG.error(e);
- }
-
- return null;
+ return createFileFromTemplate(name, templateName, dir);
}
@Override
dir.checkCreateFile(name);
}
- @NotNull
@Override
- protected CreateFileFromTemplateDialog.Builder buildDialog(Project project, PsiDirectory directory) {
- final CreateFileFromTemplateDialog.Builder builder =
- CreateFileFromTemplateDialog.createDialog(project, XmlBundle.message("new.html.file.action"));
- builder.addKind("HTML file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML_TEMPLATE_NAME);
- builder.addKind("HTML5 file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML5_TEMPLATE_NAME);
- builder.addKind("XHTML file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_XHTML_TEMPLATE_NAME);
- return builder;
+ protected void buildDialog(Project project, PsiDirectory directory, CreateFileFromTemplateDialog.Builder builder) {
+ builder
+ .setTitle(XmlBundle.message("new.html.file.action"))
+ .addKind("HTML file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML_TEMPLATE_NAME)
+ .addKind("HTML5 file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_HTML5_TEMPLATE_NAME)
+ .addKind("XHTML file", StdFileTypes.HTML.getIcon(), FileTemplateManager.INTERNAL_XHTML_TEMPLATE_NAME);
}
@Override
- protected String getDefaultTempalteName(@NotNull PsiDirectory dir) {
+ protected String getDefaultTemplateName(@NotNull PsiDirectory dir) {
return PropertiesComponent.getInstance(dir.getProject()).getValue(DEFAULT_HTML_TEMPLATE_PROPERTY);
}
protected String getActionName(PsiDirectory directory, String newName, String templateName) {
return XmlBundle.message("new.html.file.action");
}
-
- @Override
- protected String getErrorTitle() {
- return CommonBundle.getErrorTitle();
- }
}