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);
- }
}