decouple core file template logic from StdFileTypes.JAVA

This commit is contained in:
Dmitry Jemerov
2012-02-10 18:51:02 +01:00
parent 0ab60fac59
commit 8a4916c1e9
5 changed files with 46 additions and 12 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.ide.fileTemplates;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx;
@@ -108,6 +109,26 @@ public class JavaCreateFromTemplateHandler implements CreateFromTemplateHandler
return false;
}
@Override
public boolean isNameRequired() {
return false;
}
@Override
public String getErrorMessage() {
return IdeBundle.message("title.cannot.create.class");
}
@Override
public Properties prepareProperties(Properties props) {
String packageName = props.getProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME);
if(packageName == null || packageName.length() == 0){
props = new Properties(props);
props.setProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME, FileTemplate.ATTRIBUTE_PACKAGE_NAME);
}
return props;
}
public static boolean canCreate(PsiDirectory dir) {
return JavaDirectoryService.getInstance().getPackage(dir) != null;
}
@@ -35,4 +35,8 @@ public interface CreateFromTemplateHandler {
Properties props) throws IncorrectOperationException;
boolean canCreate(final PsiDirectory[] dirs);
boolean isNameRequired();
String getErrorMessage();
Properties prepareProperties(Properties props);
}
@@ -16,6 +16,7 @@
package com.intellij.ide.fileTemplates;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDirectory;
@@ -67,4 +68,19 @@ public class DefaultCreateFromTemplateHandler implements CreateFromTemplateHandl
public boolean canCreate(final PsiDirectory[] dirs) {
return true;
}
@Override
public boolean isNameRequired() {
return true;
}
@Override
public String getErrorMessage() {
return IdeBundle.message("title.cannot.create.file");
}
@Override
public Properties prepareProperties(Properties props) {
return props;
}
}
@@ -279,13 +279,8 @@ public class FileTemplateUtil{
props.setProperty(dummyRef, "");
}
if (template.isTemplateOfType(StdFileTypes.JAVA)){
String packageName = props.getProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME);
if(packageName == null || packageName.length() == 0){
props = new Properties(props);
props.setProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME, FileTemplate.ATTRIBUTE_PACKAGE_NAME);
}
}
final CreateFromTemplateHandler handler = findHandler(template);
props = handler.prepareProperties(props);
final Properties props_ = props;
String mergedText = ClassLoaderUtil.runWithClassLoader(classLoader != null ? classLoader : FileTemplateUtil.class.getClassLoader(),
@@ -304,7 +299,6 @@ public class FileTemplateUtil{
ApplicationManager.getApplication().runWriteAction(new Runnable(){
public void run(){
try{
CreateFromTemplateHandler handler = findHandler(template);
result [0] = handler.createFromTemplate(project, directory, fileName, template, templateText, finalProps);
}
catch (Exception ex){
@@ -322,7 +316,7 @@ public class FileTemplateUtil{
return result[0];
}
private static CreateFromTemplateHandler findHandler(final FileTemplate template) {
public static CreateFromTemplateHandler findHandler(final FileTemplate template) {
for(CreateFromTemplateHandler handler: Extensions.getExtensions(CreateFromTemplateHandler.EP_NAME)) {
if (handler.handlesTemplate(template)) {
return handler;
@@ -22,7 +22,6 @@ import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.ide.fileTemplates.actions.AttributesDefaults;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
@@ -65,7 +64,7 @@ public class CreateFromTemplateDialog extends DialogWrapper {
myDefaultProperties = defaultProperties == null ? FileTemplateManager.getInstance().getDefaultProperties() : defaultProperties;
FileTemplateUtil.fillDefaultProperties(myDefaultProperties, directory);
boolean mustEnterName = !myTemplate.isTemplateOfType(StdFileTypes.JAVA);
boolean mustEnterName = FileTemplateUtil.findHandler(template).isNameRequired();
if (attributesDefaults != null && attributesDefaults.isFixedName()) {
myDefaultProperties.setProperty(FileTemplate.ATTRIBUTE_NAME, attributesDefaults.getDefaultFileName());
mustEnterName = false;
@@ -134,7 +133,7 @@ public class CreateFromTemplateDialog extends DialogWrapper {
}
private String getErrorMessage() {
return myTemplate.isTemplateOfType(StdFileTypes.JAVA) ? IdeBundle.message("title.cannot.create.class") : IdeBundle.message("title.cannot.create.file");
return FileTemplateUtil.findHandler(myTemplate).getErrorMessage();
}
@Nullable