package jetbrains.mps.ide.actions;
/*Generated by MPS */
import jetbrains.mps.workbench.action.BaseAction;
import javax.swing.Icon;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.actionSystem.AnActionEvent;
import java.util.Map;
import java.util.List;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.smodel.SModelStereotype;
import jetbrains.mps.project.MPSProject;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.ide.refactoring.RefactoringSettings;
import jetbrains.mps.workbench.dialogs.DeleteDialog;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.ide.save.SaveRepositoryCommand;
import jetbrains.mps.workbench.actions.model.DeleteModelHelper;
public class DeleteModels_Action extends BaseAction {
private static final Icon ICON = null;
public DeleteModels_Action() {
super("Delete Models", "", ICON);
this.setIsAlwaysVisible(false);
this.setExecuteOutsideCommand(true);
}
@Override
public boolean isDumbAware() {
return true;
}
@Override
public void doUpdate(@NotNull AnActionEvent event, final Map<String, Object> _params) {
event.getPresentation().setText((((List<SModel>) MapSequence.fromMap(_params).get("models")).size() == 1 ? "Delete Model" : "Delete Models"));
boolean anyRegular = false;
for (SModel m : ListSequence.fromList(((List<SModel>) MapSequence.fromMap(_params).get("models")))) {
if (!(SModelStereotype.isStubModel(m)) && !(SModelStereotype.isDescriptorModel(m))) {
anyRegular = true;
break;
}
}
setEnabledState(event.getPresentation(), anyRegular);
}
@Override
protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) {
if (!(super.collectActionData(event, _params))) {
return false;
}
{
MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT);
MapSequence.fromMap(_params).put("project", p);
if (p == null) {
return false;
}
}
{
SModule p = event.getData(MPSCommonDataKeys.CONTEXT_MODULE);
MapSequence.fromMap(_params).put("contextModule", p);
if (p == null) {
return false;
}
}
{
List<SModel> p = event.getData(MPSCommonDataKeys.MODELS);
MapSequence.fromMap(_params).put("models", p);
if (p == null) {
return false;
}
}
return true;
}
@Override
public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) {
boolean safeDelete = RefactoringSettings.getInstance().SAFE_DELETE;
final DeleteDialog.DeleteOption safeOption = new DeleteDialog.DeleteOption("Safe Delete", safeDelete, true);
DeleteDialog dialog = new DeleteDialog(((MPSProject) MapSequence.fromMap(_params).get("project")), "Delete Models", "Are you sure you want to delete selected models?", safeOption);
dialog.show();
if (!(dialog.isOK())) {
return;
}
RefactoringSettings.getInstance().SAFE_DELETE = safeOption.selected;
final SRepository repository = ((MPSProject) MapSequence.fromMap(_params).get("project")).getRepository();
repository.getModelAccess().executeCommandInEDT(new Runnable() {
public void run() {
// see MPS-18743
new SaveRepositoryCommand(repository).execute();
for (SModel model : ListSequence.fromList(((List<SModel>) MapSequence.fromMap(_params).get("models")))) {
if (SModelStereotype.isStubModel(model) || SModelStereotype.isDescriptorModel(model)) {
continue;
}
DeleteModelHelper.deleteModel(((MPSProject) MapSequence.fromMap(_params).get("project")), ((SModule) MapSequence.fromMap(_params).get("contextModule")), model, safeOption.selected, true);
}
}
});
}
}