package floobits.actions; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.editor.CaretModel; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import floobits.FloobitsPlugin; import floobits.common.BrowserOpener; import floobits.common.DotFloo; import floobits.common.FlooUrl; import floobits.common.Utils; import floobits.impl.ContextImpl; import floobits.utilities.Flog; import java.awt.*; import java.net.URI; import java.net.URISyntaxException; public class OpenWorkspaceInBrowser extends CanFloobits { @Override public void actionPerformed(AnActionEvent event, Project project, FloobitsPlugin plugin, ContextImpl context) { String projectPath = project.getBasePath(); int line = 0; String path = null; Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); Editor editor = PlatformDataKeys.EDITOR.getData(DataManager.getInstance().getDataContext(owner)); if (editor != null) { Document document = editor.getDocument(); VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document); CaretModel caretModel = editor.getCaretModel(); LogicalPosition logicalPosition = caretModel.getLogicalPosition(); line = logicalPosition.line + 1; String absPath = virtualFile != null ? virtualFile.getPath() : null; path = Utils.toProjectRelPath(absPath, projectPath); } FlooUrl flooUrl = DotFloo.read(projectPath); if (flooUrl == null) { context.errorMessage(String.format("Could not determine the Floobits workspace for %s, did you create it and join it previously?", path)); return; } String urlStr = flooUrl.toString(); if (path != null) { urlStr = String.format("%s/file/%s:%d", flooUrl, path, line); } URI uri; try { uri = new URI(urlStr); } catch (URISyntaxException e) { Flog.info("Couldn't open settings in browser", e); return; } BrowserOpener.getInstance().openInBrowser(uri, "Click here to go your project's settings.", context); } }