Author: yradtsevich
Date: 2012-05-22 08:13:10 -0400 (Tue, 22 May 2012)
New Revision: 41249
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java
Log:
https://issues.jboss.org/browse/JBIDE-11923 : BrowserSim cannot start on Ubuntu with
Eclipse 3.7.2 installed by package manager
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java 2012-05-22
12:04:53 UTC (rev 41248)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java 2012-05-22
12:13:10 UTC (rev 41249)
@@ -15,12 +15,14 @@
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
-import org.jboss.tools.vpe.browsersim.browser.PlatformUtil;
+import org.eclipse.osgi.framework.internal.core.BundleFragment;
+import org.eclipse.osgi.framework.internal.core.BundleHost;
import org.jboss.tools.vpe.browsersim.eclipse.Activator;
import org.jboss.tools.vpe.browsersim.eclipse.callbacks.BrowserSimCallback;
import org.jboss.tools.vpe.browsersim.eclipse.callbacks.OpenFileCallback;
@@ -30,17 +32,19 @@
/**
* @author "Yahor Radtsevich (yradtsevich)"
*/
+@SuppressWarnings("restriction")
public class BrowserSimLauncher {
public static final String BROWSERSIM_CLASS_NAME =
"org.jboss.tools.vpe.browsersim.ui.BrowserSim"; //$NON-NLS-1$
- private static final BrowserSimCallback[] BROWSERSIM_CALLBACKS = { new
ViewSourceCallback(), new OpenFileCallback() };
+ private static final BrowserSimCallback[] BROWSERSIM_CALLBACKS = { new
ViewSourceCallback(), new OpenFileCallback() };
+ private static final String[] REQUIRED_PLUGINS = {
+ "org.jboss.tools.vpe.browsersim",
+ "org.jboss.tools.vpe.browsersim.browser",
+ "org.eclipse.swt"};
public static void launchBrowserSim(String initialUrl) {
- String pathSeparator = System.getProperty("path.separator"); //$NON-NLS-1$
try {
- String classPath = getBundleLocation("org.jboss.tools.vpe.browsersim")
//$NON-NLS-1$
- + pathSeparator +
getBundleLocation("org.jboss.tools.vpe.browsersim.browser") //$NON-NLS-1$
- + pathSeparator + getBundleLocation("org.eclipse.swt") //$NON-NLS-1$
- + pathSeparator + getBundleLocation("org.eclipse.swt." +
PlatformUtil.CURRENT_PLATFORM); //$NON-NLS-1$
+
+ String classPath = getClassPathString();
String javaCommand = System.getProperty("java.home") +
"/bin/java"; //$NON-NLS-1$ //$NON-NLS-2$
List<String> commandElements = new ArrayList<String>();
@@ -99,13 +103,47 @@
Activator.logError(e.getMessage(), e);
}
}
+
+ private static String getClassPathString() throws IOException {
+ List<Bundle> classPathBundles = new ArrayList<Bundle>();
+ for (String requiredPlugin : REQUIRED_PLUGINS) {
+ classPathBundles.addAll(getBundleAndFragments(requiredPlugin));
+ }
+
+ String pathSeparator = System.getProperty("path.separator"); //$NON-NLS-1$
+ StringBuilder classPath = new StringBuilder();
+ if (classPathBundles.size() > 0) {
+ for (int i = 0; i < classPathBundles.size() - 1; i++) {
+ classPath.append(getBundleLocation(classPathBundles.get(i)));
+ classPath.append(pathSeparator);
+ }
+ classPath.append(getBundleLocation(classPathBundles.get(classPathBundles.size() -
1)));
+ }
+
+ return classPath.toString();
+ }
- private static String getBundleLocation(String symbolicName) throws IOException {
+ private static List<Bundle> getBundleAndFragments(String symbolicName) throws
IOException {
+ List<Bundle> bundles = new ArrayList<Bundle>();
Bundle bundle = Platform.getBundle(symbolicName);
+
if (bundle == null) {
throw new IOException("Cannot find bundle: " + symbolicName);
}
+ bundles.add(bundle);
+
+ if (bundle instanceof BundleHost) {
+ BundleFragment[] fragments = ((BundleHost) bundle).getFragments();
+ if (fragments != null) {
+ Collections.addAll(bundles, fragments);
+ }
+ }
+
+ return bundles;
+ }
+
+ private static String getBundleLocation(Bundle bundle) throws IOException {
try {
File bundleLocation = FileLocator.getBundleFile(bundle);
@@ -118,7 +156,7 @@
return bundleLocation.getCanonicalPath();
} catch (IOException e) {
- throw new IOException("Cannot resolve the path to bundle: " + symbolicName,
e);
+ throw new IOException("Cannot resolve the path to bundle: " +
bundle.getSymbolicName(), e);
}
}
}