package jetbrains.mps.ide.actions; /*Generated by MPS */ import jetbrains.mps.workbench.action.BaseAction; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import javax.swing.Icon; import com.intellij.openapi.actionSystem.AnActionEvent; import java.util.Map; import jetbrains.mps.project.MPSProject; import jetbrains.mps.internal.collections.runtime.MapSequence; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.module.SModule; import java.util.List; import org.jetbrains.mps.openapi.model.EditableSModel; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ITranslator2; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.smodel.SModelStereotype; import jetbrains.mps.project.AbstractModule; import jetbrains.mps.smodel.Generator; import jetbrains.mps.internal.collections.runtime.ListSequence; import org.apache.log4j.Level; public class ForcedSaveAll_Action extends BaseAction { private static final Logger LOG = LogManager.getLogger(ForcedSaveAll_Action.class); private static final Icon ICON = null; public ForcedSaveAll_Action() { super("Re-save all models from project", "Re-save all models even if model was not changed", ICON); this.setIsAlwaysVisible(false); this.setExecuteOutsideCommand(false); } @Override public boolean isDumbAware() { return true; } @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; } } return true; } @Override public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) { Iterable<SModule> modules = (Iterable<SModule>) ((MPSProject) MapSequence.fromMap(_params).get("project")).getProjectModulesWithGenerators(); List<EditableSModel> allModels = Sequence.fromIterable(modules).translate(new ITranslator2<SModule, SModel>() { public Iterable<SModel> translate(SModule it) { return it.getModels(); } }).ofType(EditableSModel.class).where(new IWhereFilter<EditableSModel>() { public boolean accept(EditableSModel it) { return SModelStereotype.isUserModel(it); } }).toListSequence(); for (AbstractModule module : Sequence.fromIterable(modules).ofType(AbstractModule.class)) { module.updateExternalReferences(); if (!(module instanceof Generator)) { // generators are saved as part of owning Language's save, no need to do it twice module.save(); } } for (EditableSModel model : ListSequence.fromList(allModels)) { if (model.isReadOnly()) { continue; } try { // ensure model is loaded model.load(); // and force to save model model.setChanged(true); if (model.isChanged()) { model.save(); } } catch (Exception ex) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("Error re-saving model " + model.getName(), ex); } } } } }