blob: acc5aa4f08b463b1328bb2e3e55107fd5f4ccd11 [file] [log] [blame]
package com.intellij.openapi.externalSystem.action;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys;
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.externalSystem.model.project.ExternalProjectPojo;
import com.intellij.openapi.externalSystem.service.settings.ExternalSystemConfigLocator;
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle;
import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Denis Zhdanov
* @since 7/16/13 2:19 PM
*/
public class OpenExternalConfigAction extends AnAction implements DumbAware {
public OpenExternalConfigAction() {
getTemplatePresentation().setText(ExternalSystemBundle.message("action.open.config.text", "external"));
getTemplatePresentation().setDescription(ExternalSystemBundle.message("action.open.config.description", "external"));
}
@Override
public void update(AnActionEvent e) {
ProjectSystemId externalSystemId = ExternalSystemDataKeys.EXTERNAL_SYSTEM_ID.getData(e.getDataContext());
if (externalSystemId == null) {
e.getPresentation().setEnabled(false);
return;
}
e.getPresentation().setText(ExternalSystemBundle.message("action.open.config.text", externalSystemId.getReadableName()));
e.getPresentation().setDescription(ExternalSystemBundle.message("action.open.config.description", externalSystemId.getReadableName()));
e.getPresentation().setIcon(ExternalSystemUiUtil.getUiAware(externalSystemId).getProjectIcon());
VirtualFile config = getExternalConfig(e.getDataContext());
e.getPresentation().setEnabled(config != null);
}
@Override
public void actionPerformed(AnActionEvent e) {
Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
if (project == null) {
return;
}
VirtualFile configFile = getExternalConfig(e.getDataContext());
if (configFile == null) {
return;
}
OpenFileDescriptor descriptor = new OpenFileDescriptor(project, configFile);
FileEditorManager.getInstance(project).openTextEditor(descriptor, true);
}
@Nullable
private static VirtualFile getExternalConfig(@NotNull DataContext context) {
ProjectSystemId externalSystemId = ExternalSystemDataKeys.EXTERNAL_SYSTEM_ID.getData(context);
if (externalSystemId == null) {
return null;
}
ExternalProjectPojo projectPojo = ExternalSystemDataKeys.SELECTED_PROJECT.getData(context);
if (projectPojo == null) {
return null;
}
String path = projectPojo.getPath();
LocalFileSystem fileSystem = LocalFileSystem.getInstance();
VirtualFile externalSystemConfigPath = fileSystem.refreshAndFindFileByPath(path);
if (externalSystemConfigPath == null) {
return null;
}
VirtualFile toOpen = externalSystemConfigPath;
for (ExternalSystemConfigLocator locator : ExternalSystemConfigLocator.EP_NAME.getExtensions()) {
if (externalSystemId.equals(locator.getTargetExternalSystemId())) {
toOpen = locator.adjust(toOpen);
if (toOpen == null) {
return null;
}
}
}
return toOpen.isDirectory() ? null : toOpen;
}
}