package org.fandev.actions.generation;
import com.intellij.ide.actions.CreateElementActionBase;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.util.IncorrectOperationException;
import com.intellij.CommonBundle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.NonNls;
import org.fandev.lang.fan.FanFileType;
import javax.swing.*;
import java.util.EnumMap;
/**
* @author Dror Bereznitsky
* @date Apr 1, 2009 3:37:03 PM
*/
public abstract class NewFanActionBase extends CreateElementActionBase {
protected NewFanActionBase(final String text, final String description, final Icon icon) {
super(text, description, icon);
}
@NotNull
protected PsiElement[] invokeDialog(final Project project, final PsiDirectory directory) {
final MyInputValidator validator = new MyInputValidator(project, directory);
Messages.showInputDialog(project, getDialogPrompt(), getDialogTitle(), Messages.getQuestionIcon(), "", validator);
return validator.getCreatedElements();
}
protected void checkBeforeCreate(final String newName, final PsiDirectory directory) throws IncorrectOperationException {
//TODO
}
protected String getErrorTitle() {
return CommonBundle.getErrorTitle();
}
@NotNull
protected PsiElement[] create(final String newName, final PsiDirectory directory) throws Exception {
final EnumMap<TemplateProperty, String> parameters = new EnumMap<TemplateProperty, String>(TemplateProperty.class);
parameters.put(TemplateProperty.NAME, newName);
parameters.put(TemplateProperty.NAME_LOWER_CASE, newName.toLowerCase());
addTemplateParams(parameters);
final PsiFile file = createClassFromTemplate(directory, newName, getTemplateName(), parameters);
return new PsiElement[]{file};
}
protected void addTemplateParams(final EnumMap<TemplateProperty, String> parameters) {}
protected abstract String getTemplateName();
protected PsiFile createClassFromTemplate(final PsiDirectory directory, final String className, String templateName,
@NonNls final EnumMap<TemplateProperty, String> parameters) throws IncorrectOperationException {
return FanTemplatesFactory.createFromTemplate(directory, className + "." + FanFileType.DEFAULT_EXTENSION, templateName, parameters);
}
protected abstract String getDialogPrompt();
protected abstract String getDialogTitle();
}