package com.intellij.lang.javascript.uml.actions;
import com.intellij.diagram.DiagramDataModel;
import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.lang.javascript.JSBundle;
import com.intellij.lang.javascript.psi.ecmal4.JSClass;
import com.intellij.lang.javascript.psi.ecmal4.impl.JSIconProvider;
import com.intellij.lang.javascript.validation.fixes.CreateClassOrInterfaceFix;
import com.intellij.lang.javascript.validation.fixes.CreateClassParameters;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.PsiDirectory;
import com.intellij.util.Consumer;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class NewActionScriptClassUmlAction extends NewJSClassUmlActionBase {
public NewActionScriptClassUmlAction() {
super(JSBundle.message("new.actionscript.class.uml.action.text"), JSBundle.message("new.actionscript.class.action.description"),
JSIconProvider.AS_INSTANCE.getClassIcon());
}
@Override
public String getActionName() {
return JSBundle.message("new.actionscript.class.command.name");
}
@Nullable
@Override
protected CreateClassParameters showDialog(final Project project, Pair<PsiDirectory, String> dirAndPackage) {
return CreateClassOrInterfaceFix
.createAndShow(null, dirAndPackage.first, null, true, dirAndPackage.second, null, JSBundle.message("new.actionscript.class.dialog.title"),
() -> CreateClassOrInterfaceFix
.getApplicableTemplates(CreateClassOrInterfaceFix.ACTIONSCRIPT_TEMPLATES_EXTENSIONS, project));
}
@Nullable
@Override
public Object createElement(final DiagramDataModel<Object> model,
final CreateClassParameters params,
final AnActionEvent event) {
final Ref<JSClass> clazz = new Ref<>();
CommandProcessor.getInstance().executeCommand(params.getTargetDirectory().getProject(), () -> {
try {
CreateClassOrInterfaceFix
.createClass(params.getTemplateName(), params.getClassName(), params.getPackageName(), getSuperClass(params),
params.getInterfacesFqns(), params.getTargetDirectory(), getActionName(), true,
new HashMap<>(params.getTemplateAttributes()),
jsClass -> clazz.set(jsClass));
}
catch (Exception e) {
throw new IncorrectOperationException(e);
}
}, JSBundle.message(JSBundle.message("new.actionscript.class.command.name")), null);
return clazz.get();
}
}