package fr.adrienbrault.idea.symfony2plugin.action.bundle;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.psi.PsiDirectory;
import com.jetbrains.php.lang.psi.elements.PhpClass;
import com.jetbrains.php.refactoring.PhpNameUtil;
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
import fr.adrienbrault.idea.symfony2plugin.action.AbstractProjectDumbAwareAction;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*/
abstract public class NewBundleFileActionAbstract extends AbstractProjectDumbAwareAction {
public NewBundleFileActionAbstract(String text, String description, Icon phpFile) {
super(text, description, phpFile);
}
public void update(AnActionEvent event) {
Project project = getEventProject(event);
if(project == null || !Symfony2ProjectComponent.isEnabled(project)) {
this.setStatus(event, false);
return;
}
this.setStatus(event, BundleClassGeneratorUtil.getBundleDirContext(event) != null);
}
@Override
public void actionPerformed(@NotNull AnActionEvent event) {
final Project project = getEventProject(event);
if(project == null) {
this.setStatus(event, false);
return;
}
PsiDirectory bundleDirContext = BundleClassGeneratorUtil.getBundleDirContext(event);
if(bundleDirContext == null) {
return;
}
final PhpClass phpClass = BundleClassGeneratorUtil.getBundleClassInDirectory(bundleDirContext);
if(phpClass == null) {
return;
}
String className = Messages.showInputDialog(project, "New class name:", "New File", Symfony2Icons.SYMFONY);
if(StringUtils.isBlank(className)) {
return;
}
if(!PhpNameUtil.isValidClassName(className)) {
JOptionPane.showMessageDialog(null, "Invalid class name");
return;
}
write(project, phpClass, className);
}
abstract protected void write(@NotNull Project project,@NotNull PhpClass phpClass, @NotNull String className);
}