package liveplugin.toolwindow.addplugin;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.InputValidatorEx;
import com.intellij.openapi.ui.Messages;
import liveplugin.IDEUtil;
import liveplugin.Icons;
import liveplugin.LivePluginAppComponent;
import liveplugin.pluginrunner.GroovyPluginRunner;
import liveplugin.toolwindow.RefreshPluginsPanelAction;
import liveplugin.toolwindow.util.PluginsIO;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
@SuppressWarnings("ComponentNotRegistered")
public class AddNewPluginAction extends AnAction implements DumbAware {
private static final Logger log = Logger.getInstance(AddNewPluginAction.class);
private static final String addNewPluginTitle = "Add New Plugin";
public AddNewPluginAction() {
super("New Plugin", "Create new plugin", Icons.NEW_PLUGIN_ICON);
}
@Override public void actionPerformed(@NotNull AnActionEvent event) {
String newPluginId = Messages.showInputDialog(
event.getProject(),
"Enter new plugin name:",
addNewPluginTitle,
null, "", new PluginIdValidator()
);
if (newPluginId == null) return;
try {
String text = LivePluginAppComponent.defaultPluginScript();
PluginsIO.createFile(LivePluginAppComponent.pluginsRootPath() + "/" + newPluginId, GroovyPluginRunner.MAIN_SCRIPT, text);
} catch (IOException e) {
Project project = event.getProject();
if (project != null) {
IDEUtil.showErrorDialog(
project,
"Error adding plugin \"" + newPluginId + "\" to " + LivePluginAppComponent.pluginsRootPath(),
addNewPluginTitle
);
}
log.error(e);
}
RefreshPluginsPanelAction.refreshPluginTree();
}
public static class PluginIdValidator implements InputValidatorEx {
private String errorText;
@Override public boolean checkInput(String pluginId) {
boolean isValid = !LivePluginAppComponent.pluginExists(pluginId);
errorText = isValid ? null : "There is already a plugin with this name";
return isValid;
}
@Nullable @Override public String getErrorText(String pluginId) {
return errorText;
}
@Override public boolean canClose(String pluginId) {
return true;
}
}
}