package jetbrains.mps.ide.migration.storage; /*Generated by MPS */ import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.components.StoragePathMacros; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.project.Project; import jetbrains.mps.project.Version; import jetbrains.mps.project.MPSProjectVersion; import com.intellij.openapi.project.ex.ProjectEx; import com.intellij.project.ProjectKt; import com.intellij.openapi.startup.StartupManager; import com.intellij.ide.actions.SaveAsDirectoryBasedFormatAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import org.jetbrains.annotations.Nullable; import com.intellij.openapi.actionSystem.CommonDataKeys; import java.io.File; import com.intellij.openapi.vfs.VfsUtil; import java.io.IOException; /** * This migrates the project from an old file-based format to a directory-based */ @State(name = "StorageAssistant", storages = @Storage(value = StoragePathMacros.WORKSPACE_FILE) ) public class StorageAssistant extends AbstractProjectComponent implements PersistentStateComponent<StorageAssistant.MyState> { private StorageAssistant.MyState myState = new StorageAssistant.MyState(); public StorageAssistant(Project project) { super(project); } @Override public void projectOpened() { Version version = myProject.getComponent(MPSProjectVersion.class).getVersion(); if (myProject instanceof ProjectEx && !((version.isMajorUpdate(MPSProjectVersion.CURRENT))) && ProjectKt.isDirectoryBased(myProject) && myState.offerStorageMigration) { StartupManager.getInstance(myProject).registerPostStartupActivity(new Runnable() { @Override public void run() { SaveAsDirectoryBasedFormatAction action = new SaveAsDirectoryBasedFormatAction(); final AnActionEvent actionEvent = AnActionEvent.createFromDataContext("", null, new DataContext() { @Nullable @Override public Object getData(String dataId) { return (CommonDataKeys.PROJECT.getName().equals(dataId) ? myProject : null); } }); action.update(actionEvent); action.actionPerformed(actionEvent); } }); } } private boolean createDir(File ideaDir) { try { VfsUtil.createDirectories(ideaDir.getPath()); return true; } catch (IOException e) { return false; } } @Override public StorageAssistant.MyState getState() { return myState; } @Override public void loadState(StorageAssistant.MyState state) { myState = state; } public static class MyState { public boolean offerStorageMigration = true; } }