2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com
.intellij
.ide
.actions
;
19 import com
.intellij
.ide
.IdeBundle
;
20 import com
.intellij
.ide
.fileTemplates
.FileTemplate
;
21 import com
.intellij
.ide
.fileTemplates
.FileTemplateManager
;
22 import com
.intellij
.ide
.fileTemplates
.FileTemplateUtil
;
23 import com
.intellij
.ide
.highlighter
.HtmlFileType
;
24 import com
.intellij
.openapi
.actionSystem
.AnActionEvent
;
25 import com
.intellij
.openapi
.actionSystem
.Presentation
;
26 import com
.intellij
.openapi
.diagnostic
.Logger
;
27 import com
.intellij
.openapi
.fileEditor
.FileEditorManager
;
28 import com
.intellij
.openapi
.fileTypes
.FileType
;
29 import com
.intellij
.openapi
.fileTypes
.FileTypeManager
;
30 import com
.intellij
.openapi
.fileTypes
.FileTypes
;
31 import com
.intellij
.openapi
.fileTypes
.StdFileTypes
;
32 import com
.intellij
.openapi
.project
.Project
;
33 import com
.intellij
.openapi
.ui
.Messages
;
34 import com
.intellij
.openapi
.vfs
.VirtualFile
;
35 import com
.intellij
.psi
.PsiDirectory
;
36 import com
.intellij
.psi
.PsiElement
;
37 import com
.intellij
.psi
.PsiFile
;
38 import com
.intellij
.util
.IncorrectOperationException
;
39 import org
.jetbrains
.annotations
.NotNull
;
44 public class CreateHtmlAction
extends CreateElementActionBase
{
45 private static final Logger LOG
= Logger
.getInstance("#com.intellij.ide.actions.CreateHtmlAction");
47 private final FileType myFileType
;
48 private final String myTemplateName
;
50 public CreateHtmlAction() {
51 this(StdFileTypes
.HTML
, FileTemplateManager
.INTERNAL_HTML_TEMPLATE_NAME
);
54 protected CreateHtmlAction(FileType fileType
, String templateName
) {
55 super(IdeBundle
.message("action.create.new.filetype", fileType
.getName()),
56 IdeBundle
.message("action.description.create.new.file", fileType
.getName()), fileType
.getIcon());
58 myFileType
= fileType
;
59 myTemplateName
= templateName
;
63 protected PsiElement
[] invokeDialog(Project project
, PsiDirectory directory
) {
64 CreateElementActionBase
.MyInputValidator validator
= new CreateElementActionBase
.MyInputValidator(project
, directory
);
65 Messages
.showInputDialog(project
, IdeBundle
.message("prompt.enter.new.filetype.name", myFileType
.getName()),
66 IdeBundle
.message("title.new.filetype", myFileType
.getName()), Messages
.getQuestionIcon(), "", validator
);
67 return validator
.getCreatedElements();
71 protected void checkBeforeCreate(String newName
, PsiDirectory directory
) throws IncorrectOperationException
{
72 newName
= getName(newName
);
73 directory
.checkCreateFile(newName
);
76 public static boolean isExtensionOfType(@NotNull final String fileName
, @NotNull final FileType type
) {
77 final int i
= fileName
.lastIndexOf('.');
79 final String ext
= fileName
.substring(i
+ 1);
80 if (type
.getDefaultExtension().equals(ext
)) {
88 private String
getName(String oldName
) {
89 if (isExtensionOfType(oldName
, myFileType
)) return oldName
;
90 return oldName
+ "." + myFileType
.getDefaultExtension();
94 protected PsiElement
[] create(String newName
, PsiDirectory directory
) throws Exception
{
95 final FileTemplate template
= FileTemplateManager
.getInstance().getInternalTemplate(myTemplateName
);
99 element
= FileTemplateUtil
100 .createFromTemplate(template
, getName(newName
), FileTemplateManager
.getInstance().getDefaultProperties(), directory
);
101 final PsiFile psiFile
= element
.getContainingFile();
103 final VirtualFile virtualFile
= psiFile
.getVirtualFile();
104 if (virtualFile
!= null) {
105 FileEditorManager
.getInstance(directory
.getProject()).openFile(virtualFile
, true);
106 return new PsiElement
[]{psiFile
};
109 catch (IncorrectOperationException e
) {
112 catch (Exception e
) {
116 return PsiElement
.EMPTY_ARRAY
;
119 protected String
getErrorTitle() {
120 return IdeBundle
.message("title.cannot.create.filetype", myFileType
.getName());
123 protected String
getCommandName() {
124 return IdeBundle
.message("command.name.create.new.file", myFileType
.getName());
127 protected String
getActionName(PsiDirectory directory
, String newName
) {
128 return IdeBundle
.message("progress.creating.filetype.in.directory", myFileType
.getName(), newName
, directory
.getName());
131 public void update(final AnActionEvent e
) {
133 Presentation presentation
= e
.getPresentation();
134 final FileTypeManager manager
= FileTypeManager
.getInstance();
135 final FileType fileType
= manager
.getFileTypeByExtension(HtmlFileType
.DOT_DEFAULT_EXTENSION
);
136 if (fileType
== FileTypes
.PLAIN_TEXT
) {
137 presentation
.setEnabled(false);
138 presentation
.setVisible(false);