diff --git a/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml b/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml index d6ef063029af..ffb957bff742 100644 --- a/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml +++ b/plugins/javaFX/src/META-INF/common-javaFX-plugin.xml @@ -57,6 +57,7 @@ + diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/actions/OpenInSceneBuilderAction.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/actions/OpenInSceneBuilderAction.java index f41b9be4c614..6a56d6b60cdc 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/actions/OpenInSceneBuilderAction.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/actions/OpenInSceneBuilderAction.java @@ -17,35 +17,18 @@ package org.jetbrains.plugins.javaFX.actions; import com.intellij.CommonBundle; import com.intellij.execution.configurations.GeneralCommandLine; -import com.intellij.execution.configurations.JavaParameters; -import com.intellij.execution.configurations.PathEnvironmentVariableUtil; -import com.intellij.execution.process.OSProcessHandler; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.fileChooser.FileChooser; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.ArrayUtil; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.javaFX.JavaFxSettings; -import org.jetbrains.plugins.javaFX.JavaFxSettingsConfigurable; import org.jetbrains.plugins.javaFX.fxml.JavaFxFileTypeFactory; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; +import org.jetbrains.plugins.javaFX.sceneBuilder.SceneBuilderInfo; /** * User: anna @@ -53,84 +36,21 @@ import java.util.List; */ public class OpenInSceneBuilderAction extends AnAction { private static final Logger LOG = Logger.getInstance("#" + OpenInSceneBuilderAction.class.getName()); - public static final String ORACLE = "Oracle"; @Override public void actionPerformed(AnActionEvent e) { final VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE); LOG.assertTrue(virtualFile != null); final String path = virtualFile.getPath(); - - final JavaFxSettings settings = JavaFxSettings.getInstance(); - String pathToSceneBuilder = settings.getPathToSceneBuilder(); - if (StringUtil.isEmptyOrSpaces(settings.getPathToSceneBuilder())){ - final VirtualFile sceneBuilderFile = FileChooser.chooseFile(JavaFxSettingsConfigurable.createSceneBuilderDescriptor(), e.getProject(), getPredefinedPath()); - if (sceneBuilderFile == null) return; - - pathToSceneBuilder = sceneBuilderFile.getPath(); - settings.setPathToSceneBuilder(FileUtil.toSystemIndependentName(pathToSceneBuilder)); - } - final Project project = getEventProject(e); - if (project != null && !Registry.is("scene.builder.start.executable", true)) { - final Module module = ModuleUtilCore.findModuleForFile(virtualFile, project); - if (module != null) { - try { - final JavaParameters javaParameters = new JavaParameters(); - javaParameters.configureByModule(module, JavaParameters.JDK_AND_CLASSES); - final File sceneBuilderLibsFile; - if (SystemInfo.isMac) { - sceneBuilderLibsFile = new File(new File(pathToSceneBuilder, "Contents"), "Java"); - } else if (SystemInfo.isWindows) { - File sceneBuilderRoot = new File(pathToSceneBuilder); - File sceneBuilderRootDir = sceneBuilderRoot.getParentFile(); - if (sceneBuilderRootDir == null) { - final File foundInPath = PathEnvironmentVariableUtil.findInPath(pathToSceneBuilder); - if (foundInPath != null) { - sceneBuilderRootDir = foundInPath.getParentFile(); - } - } - sceneBuilderRoot = sceneBuilderRootDir != null ? sceneBuilderRootDir.getParentFile() : null; - if (sceneBuilderRoot != null) { - final File libFile = new File(sceneBuilderRoot, "lib"); - if (libFile.isDirectory()) { - sceneBuilderLibsFile = libFile; - } - else { - final File appFile = new File(sceneBuilderRootDir, "app"); - sceneBuilderLibsFile = appFile.isDirectory() ? appFile : null; - } - } - else { - sceneBuilderLibsFile = null; - } - } else { - sceneBuilderLibsFile = new File(new File(pathToSceneBuilder).getParent(), "app"); - } - if (sceneBuilderLibsFile != null) { - final File[] sceneBuilderLibs = sceneBuilderLibsFile.listFiles(); - if (sceneBuilderLibs != null) { - for (File jarFile : sceneBuilderLibs) { - javaParameters.getClassPath().add(jarFile.getPath()); - } - javaParameters.setMainClass("com.oracle.javafx.authoring.Main"); - javaParameters.getProgramParametersList().add(path); - - final OSProcessHandler processHandler = javaParameters.createOSProcessHandler(); - final String commandLine = processHandler.getCommandLine(); - LOG.info("scene builder command line: " + commandLine); - processHandler.startNotify(); - return; - } - } - } - catch (Throwable ex) { - LOG.info(ex); - } - } + final SceneBuilderInfo info = SceneBuilderInfo.get(project, true); + if (info == SceneBuilderInfo.EMPTY) { + return; } + String pathToSceneBuilder = info.path; + if (SystemInfo.isMac) { pathToSceneBuilder += "/Contents/MacOS/scenebuilder-launcher.sh"; } @@ -152,45 +72,11 @@ public class OpenInSceneBuilderAction extends AnAction { presentation.setEnabled(false); presentation.setVisible(false); final VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE); - if (virtualFile != null && + if (virtualFile != null && JavaFxFileTypeFactory.isFxml(virtualFile) && e.getProject() != null) { presentation.setEnabled(true); presentation.setVisible(true); } } - - @Nullable - private static VirtualFile getPredefinedPath() { - String path = null; - if (SystemInfo.isWindows) { - final String sb11 = File.separator + "JavaFX Scene Builder 1.1" + File.separator + "JavaFX Scene Builder 1.1.exe"; - final String sb10 = File.separator + "JavaFX Scene Builder 1.0" + File.separator + "bin" + File.separator + "scenebuilder.exe"; - final List suspiciousPaths = new ArrayList(); - final String programFiles = "C:\\Program Files"; - fillPaths(programFiles, sb11, sb10, suspiciousPaths); - fillPaths(programFiles + " (x86)", sb11, sb10, suspiciousPaths); - final File sb = FileUtil.findFirstThatExist(ArrayUtil.toStringArray(suspiciousPaths)); - if (sb != null) { - path = sb.getPath(); - } - } - else if (SystemInfo.isMac) { - final File sb = FileUtil.findFirstThatExist("/Applications/JavaFX Scene Builder 1.1.app", - "/Applications/JavaFX Scene Builder 1.0.app"); - if (sb != null) { - path = sb.getPath(); - } - } - else if (SystemInfo.isUnix) { - path = "/opt/JavaFXSceneBuilder1.1/JavaFXSceneBuilder1.1"; - } - - return path != null ? LocalFileSystem.getInstance().findFileByPath(FileUtil.toSystemIndependentName(path)) : null; - } - - private static void fillPaths(String programFilesPath, String sb11, String sb10, List suspiciousPaths) { - suspiciousPaths.add(new File(programFilesPath, ORACLE).getPath() + sb11); - suspiciousPaths.add(new File(programFilesPath, ORACLE).getPath() + sb10); - } }