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 com.intellij.openapi.actionSystem.Presentation;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import jetbrains.mps.smodel.SModelStereotype;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.smodel.Language;
import jetbrains.mps.smodel.language.LanguageAspectSupport;
import jetbrains.mps.project.MPSProject;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import jetbrains.mps.ide.dialogs.project.creation.NewModelDialog;
public class CloneModel_Action extends BaseAction {
private static final Icon ICON = null;
public CloneModel_Action() {
super("Clone Model", "", 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) {
Presentation presentation = event.getPresentation();
if (((Integer) MapSequence.fromMap(_params).get("selSize")) != 1) {
presentation.setVisible(true);
presentation.setEnabled(false);
return;
}
if (SModelStereotype.isDescriptorModel(((SModel) MapSequence.fromMap(_params).get("model")))) {
presentation.setVisible(false);
presentation.setEnabled(false);
return;
}
SModule module = ((SModel) MapSequence.fromMap(_params).get("model")).getModule();
boolean isAspectModel = module instanceof Language && LanguageAspectSupport.isAspectModel(((SModel) MapSequence.fromMap(_params).get("model")));
presentation.setVisible(!(isAspectModel));
presentation.setEnabled(!(isAspectModel));
}
@Override
protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) {
if (!(super.collectActionData(event, _params))) {
return false;
}
{
SModel p = event.getData(MPSCommonDataKeys.MODEL);
MapSequence.fromMap(_params).put("model", p);
if (p == null) {
return false;
}
}
{
MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT);
MapSequence.fromMap(_params).put("project", p);
if (p == null) {
return false;
}
}
{
Integer p = event.getData(MPSCommonDataKeys.TREE_SELECTION_SIZE);
MapSequence.fromMap(_params).put("selSize", p);
if (p == null) {
return false;
}
}
return true;
}
@Override
public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) {
final Wrappers._T<NewModelDialog> dialog = new Wrappers._T<NewModelDialog>();
((MPSProject) MapSequence.fromMap(_params).get("project")).getRepository().getModelAccess().runReadAction(new Runnable() {
public void run() {
dialog.value = new NewModelDialog(((MPSProject) MapSequence.fromMap(_params).get("project")), ((SModel) MapSequence.fromMap(_params).get("model")));
}
});
dialog.value.show();
}
}