Fixed shared configuration
Signed-off-by: Alexander Dudaev <aleksandr.dudayev@xored.com>
Change-Id: I00398f29ab6339a6e5ef8eacab6cab5f91a1bf22
diff --git a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/ext/Q7ExternalLaunchDelegate.java b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/ext/Q7ExternalLaunchDelegate.java
index 33f2eb9..f9eafe3 100644
--- a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/ext/Q7ExternalLaunchDelegate.java
+++ b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/ext/Q7ExternalLaunchDelegate.java
@@ -61,6 +61,7 @@
import org.eclipse.jdt.launching.IVMInstallType;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.target.ITargetDefinition;
import org.eclipse.pde.core.target.ITargetLocation;
import org.eclipse.pde.core.target.TargetBundle;
import org.eclipse.pde.internal.build.IPDEBuildConstants;
@@ -605,7 +606,7 @@
CachedInfo info = LaunchInfoCache.getInfo(configuration);
ITargetPlatformHelper target = (ITargetPlatformHelper) info.target;
- BundlesToLaunch bundlesToLaunch = collectBundlesCheck(target.getQ7Target(), subm.newChild(50), configuration);
+ BundlesToLaunch bundlesToLaunch = collectBundlesCheck(target.getQ7Target(), target.getTarget(), subm.newChild(50), configuration);
setBundlesToLaunch(info, bundlesToLaunch);
@@ -761,7 +762,7 @@
}
- public static BundlesToLaunch collectBundlesCheck(Q7Target target, IProgressMonitor monitor,
+ public static BundlesToLaunch collectBundlesCheck(Q7Target target, ITargetDefinition targetDefinition, IProgressMonitor monitor,
ILaunchConfiguration configuration) {
if (target.getInstall() != null && isAutConfigSimpleconfiguratorSet(target)) {
final CachedInfo info = LaunchInfoCache.getInfo(configuration);
@@ -770,10 +771,10 @@
setBundlesLevels(target, levelMap);
}
- return collectBundles(target, monitor);
+ return collectBundles(target, targetDefinition, monitor);
}
- public static BundlesToLaunch collectBundles(Q7Target target, IProgressMonitor monitor) {
+ public static BundlesToLaunch collectBundles(Q7Target target, ITargetDefinition targetDefinition, IProgressMonitor monitor) {
BundlesToLaunchCollector collector = new BundlesToLaunchCollector();
SubMonitor subm = SubMonitor.convert(monitor, "Collecting bundles", 3000);
SubMonitor install = subm.newChild(1000);
@@ -792,28 +793,14 @@
}
install.done();
- SubMonitor pluginsDirMonitor = subm.newChild(1000);
- if (target.getPluginsDirs().size() > 0) {
- for(ITargetLocation location : target.getPluginsDirs()) {
- TargetBundle[] bundles = location.getBundles();
- pluginsDirMonitor.beginTask("Scanning " + location, bundles.length);
- for (TargetBundle bundle : bundles) {
- collector.addPluginBundle(bundle);
- pluginsDirMonitor.worked(1);
- }
- }
+ final SubMonitor plugins = subm.newChild(1000);
+ TargetBundle[] bundles = targetDefinition.getAllBundles();
+ for (TargetBundle bundle : bundles) {
+ collector.addPluginBundle(bundle);
+ plugins.worked(1);
}
- pluginsDirMonitor.done();
+ plugins.done();
- SubMonitor extrasMonitor = subm.newChild(1000);
- extrasMonitor.beginTask("Injecting RCPTT runtime", 1);
- for (ITargetLocation extra : target.getExtras()) {
- for (TargetBundle bundle : extra.getBundles()) {
- collector.addExtraBundle(bundle);
- }
- extrasMonitor.worked(1);
- }
- extrasMonitor.done();
return new BundlesToLaunch(collector.rejectedBundles,
collector.plugins, collector.latestVersions);
diff --git a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/Q7Target.java b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/Q7Target.java
index 1cc0b81..831f833 100644
--- a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/Q7Target.java
+++ b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/Q7Target.java
@@ -10,7 +10,6 @@
*******************************************************************************/
package org.eclipse.rcptt.launching.internal.target;
-import static com.google.common.collect.Iterables.filter;
import static java.lang.String.format;
import static org.eclipse.pde.internal.build.IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR;
import static org.eclipse.pde.internal.core.TargetPlatformHelper.getDefaultBundleList;
@@ -21,17 +20,12 @@
import java.io.File;
import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.LinkedHashMap;
-import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.pde.core.target.ITargetLocation;
import org.eclipse.pde.core.target.TargetBundle;
-import org.eclipse.pde.internal.core.target.DirectoryBundleContainer;
-import org.eclipse.pde.internal.core.target.IUBundleContainer;
import org.eclipse.pde.internal.core.target.ProfileBundleContainer;
import org.eclipse.rcptt.launching.ext.BundleStart;
import org.eclipse.rcptt.launching.ext.OriginalOrderProperties;
@@ -75,58 +69,6 @@
}
/**
- * Plugins directory, may be <code>null</code>
- */
- private List<ITargetLocation> pluginsDirs = new ArrayList<ITargetLocation>();
-
- public List<ITargetLocation> getPluginsDirs() {
- return pluginsDirs;
- }
-
- public void addPluginsDir(ITargetLocation container) {
- if (pluginsDirs.contains(container)) {
- return;
- }
- if (container instanceof DirectoryBundleContainer) {
- pluginsDirs.add(container);
- }
- }
- /**
- * Q7 Runtime, Q7 runtime dependencies, other injections
- */
- private List<ITargetLocation> extras = new ArrayList<ITargetLocation>();
-
- public void addExtra(ITargetLocation container) {
- if (!contains(container)) {
- extras.add(container);
- }
- }
-
- public Iterable<ITargetLocation> getExtras() {
- return extras;
- }
-
- private boolean contains(ITargetLocation container) {
- if (extras.contains(container)) {
- return true;
- }
-
- if (!(container instanceof IUBundleContainer)) {
- return false;
- }
-
- IUBundleContainer cont = (IUBundleContainer) container;
- for (IUBundleContainer existing : filter(extras,
- IUBundleContainer.class)) {
- if (Arrays.equals(existing.getRepositories(),
- cont.getRepositories())) {
- return true;
- }
- }
- return false;
- }
-
- /**
* Describes
*
* @author ivaninozemtsev
diff --git a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/TargetPlatformHelper.java b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/TargetPlatformHelper.java
index 2d292fe..3cf4ec2 100644
--- a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/TargetPlatformHelper.java
+++ b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/internal/target/TargetPlatformHelper.java
@@ -75,7 +75,6 @@
import org.eclipse.pde.internal.core.PDECore;
import org.eclipse.pde.internal.core.PDEExtensionRegistry;
import org.eclipse.pde.internal.core.PDEState;
-import org.eclipse.pde.internal.core.target.DirectoryBundleContainer;
import org.eclipse.pde.internal.core.target.IUBundleContainer;
import org.eclipse.pde.internal.core.target.P2TargetUtils;
import org.eclipse.pde.internal.core.target.ProfileBundleContainer;
@@ -302,16 +301,12 @@
private void initialize() {
extra.clear();
- q7target = new Q7Target();
+ q7target = new Q7Target();
if (this.target != null && this.target.getTargetLocations() != null) {
ITargetLocation[] containers = this.target.getTargetLocations();
for (ITargetLocation iUBundleContainer : containers) {
if (iUBundleContainer instanceof ProfileBundleContainer) {
getQ7Target().setInstall(iUBundleContainer);
- } else if (iUBundleContainer instanceof DirectoryBundleContainer) {
- getQ7Target().addPluginsDir(iUBundleContainer);
- } else {
- getQ7Target().addExtra(iUBundleContainer);
}
extra.add(iUBundleContainer);
}
@@ -755,7 +750,6 @@
}
ITargetLocation container = PDEHelper.getTargetService()
.newDirectoryLocation(path);
- q7target.addExtra(container);
extra.add(container);
return Status.OK_STATUS;
}
@@ -820,8 +814,6 @@
IUBundleContainer.INCLUDE_ALL_ENVIRONMENTS);
extra.add(container);
- q7target.addExtra(container);
-
}
// Lets mirror all required artifacts into bundle pool, since we don't
@@ -1416,7 +1408,16 @@
// if the config or parent we are about to read is the same as the base config we read above,
// just reuse the base
OriginalOrderProperties configuration = baseConfiguration;
- final URL configUrl = getConfigurationLocation(location, autInstall);
+ final URL configUrl = getConfigurationLocation(location, autInstall.getInstallLocation());
+
+ String configurationArea = configUrl.getFile();
+ int index = configurationArea.lastIndexOf("/");
+ if (index == configurationArea.length() - 1) {
+ configurationArea = configurationArea.substring(0, index);
+ index = configurationArea.lastIndexOf("/");
+ }
+ autInstall.userArea = configurationArea.substring(0, index + 1);
+
if (configuration == null || !configUrl.equals(baseConfigurationLocation))
configuration = loadConfiguration(configUrl);
@@ -1541,10 +1542,11 @@
return buf.toString();
}
- private static URL getConfigurationLocation(String configurationArea, AutInstall autInstall) {
- URL configurationLocation = buildLocation(configurationArea, null, "", autInstall.getInstallLocation().getAbsolutePath()); //$NON-NLS-1$
+ private static URL getConfigurationLocation(String configurationArea, File installLocation) {
+ URL configurationLocation = buildLocation(configurationArea, null, "", installLocation.getAbsolutePath()); //$NON-NLS-1$
if (configurationLocation == null)
- configurationLocation = buildURL(computeDefaultConfigurationLocation(autInstall), true, autInstall.getInstallLocation().getAbsolutePath());
+ configurationLocation = buildURL(computeDefaultConfigurationLocation(installLocation), true, installLocation.getAbsolutePath());
+
return configurationLocation;
}
@@ -1627,7 +1629,7 @@
return new URL(url.getProtocol(), url.getHost(), file);
}
- private static String computeDefaultConfigurationLocation(AutInstall autInstall) {
+ private static String computeDefaultConfigurationLocation(File installLocation) {
// 1) We store the config state relative to the 'eclipse' directory if possible
// 2) If this directory is read-only
// we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home>
@@ -1635,13 +1637,14 @@
// defined in .eclipseproduct marker file. If .eclipseproduct does not
// exist, use "eclipse" as the application-id.
- if (canWrite(autInstall.getInstallLocation()))
- autInstall.userArea = autInstall.getInstallLocation().getAbsolutePath();
+ String configurationLocation = null;
+ if (canWrite(installLocation))
+ configurationLocation = installLocation.getAbsolutePath();
else
// We can't write in the eclipse install dir so try for some place in the user's home dir
- autInstall.userArea = computeDefaultUserAreaLocation(autInstall.getInstallLocation());
+ configurationLocation = computeDefaultUserAreaLocation(installLocation);
- return autInstall.userArea + File.separator + CONFIG_DIR;
+ return configurationLocation + File.separator + CONFIG_DIR;
}
private static boolean canWrite(File installDir) {
diff --git a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/ITargetPlatformHelper.java b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/ITargetPlatformHelper.java
index e295247..1e51012 100644
--- a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/ITargetPlatformHelper.java
+++ b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/ITargetPlatformHelper.java
@@ -17,11 +17,11 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.target.ITargetDefinition;
import org.eclipse.rcptt.internal.launching.ext.OSArchitecture;
import org.eclipse.rcptt.launching.ext.OriginalOrderProperties;
import org.eclipse.rcptt.launching.injection.InjectionConfiguration;
import org.eclipse.rcptt.launching.internal.target.Q7Target;
-import org.eclipse.rcptt.launching.internal.target.Q7Target.AutInstall;
/**
* Class designed to access target platform features to configure it via easy
@@ -144,6 +144,8 @@
public abstract IPluginModelBase getWeavingHook();
IStatus getStatus();
-
+
+ public ITargetDefinition getTarget();
+
Map<String, Version> getVersions() throws CoreException;
}
diff --git a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/TargetPlatformManager.java b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/TargetPlatformManager.java
index 4cd91c9..11a4f46 100644
--- a/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/TargetPlatformManager.java
+++ b/launching/org.eclipse.rcptt.launching.ext/src/org/eclipse/rcptt/launching/target/TargetPlatformManager.java
@@ -63,26 +63,32 @@
final ITargetDefinition target = service.newTarget();
final TargetPlatformHelper info = new TargetPlatformHelper(target);
try {
+ final List<ITargetLocation> containers = new ArrayList<ITargetLocation>();
+
final File productDir = PDELocationUtils.getProductLocation(location);
- List<ITargetLocation> containers = new ArrayList<ITargetLocation>();
- ITargetLocation installationContainer = service
+ final ITargetLocation installationContainer = service
.newProfileLocation(productDir.getAbsolutePath(), null);
info.getQ7Target().setInstall(installationContainer);
containers.add(installationContainer);
final File pluginsDir = PDELocationUtils.getPluginFolder(location);
- ITargetLocation pluginsContainer = service
+ final ITargetLocation pluginsContainer = service
.newDirectoryLocation(pluginsDir.getAbsolutePath());
containers.add(pluginsContainer);
- info.getQ7Target().addPluginsDir(pluginsContainer);
final String localLocation = info.getUserArea();
if (localLocation != null) {
+ /*
+ final File localProductDir = PDELocationUtils.getProductLocation(location);
+ final ITargetLocation localInstallationContainer = service
+ .newProfileLocation(localProductDir.getAbsolutePath(), null);
+ containers.add(localInstallationContainer);
+ */
+
final File localPluginsDir = PDELocationUtils.getPluginFolder(localLocation);
final ITargetLocation localPluginsContainer = service
.newDirectoryLocation(localPluginsDir.getAbsolutePath());
containers.add(localPluginsContainer);
- info.getQ7Target().addPluginsDir(localPluginsContainer);
}
info.setBundleContainers(containers
diff --git a/modules/rap/bundles/launching/org.eclipse.rcptt.launching.rap/src/org/eclipse/rcptt/launching/rap/RcpttRapLaunchDelegate.java b/modules/rap/bundles/launching/org.eclipse.rcptt.launching.rap/src/org/eclipse/rcptt/launching/rap/RcpttRapLaunchDelegate.java
index e53fe91..3bbd850 100644
--- a/modules/rap/bundles/launching/org.eclipse.rcptt.launching.rap/src/org/eclipse/rcptt/launching/rap/RcpttRapLaunchDelegate.java
+++ b/modules/rap/bundles/launching/org.eclipse.rcptt.launching.rap/src/org/eclipse/rcptt/launching/rap/RcpttRapLaunchDelegate.java
@@ -220,7 +220,7 @@
ITargetPlatformHelper target = (ITargetPlatformHelper) info.target;
BundlesToLaunch bundlesToLaunch = Q7ExternalLaunchDelegate.collectBundlesCheck(target.getQ7Target(),
- subm.newChild(50), configuration);
+ target.getTarget(), subm.newChild(50), configuration);
Q7ExternalLaunchDelegate.setBundlesToLaunch(info, bundlesToLaunch);
diff --git a/rcp/org.eclipse.rcptt.launching.configuration/src/org/eclipse/rcptt/launching/configuration/Q7LaunchConfigurationDelegate.java b/rcp/org.eclipse.rcptt.launching.configuration/src/org/eclipse/rcptt/launching/configuration/Q7LaunchConfigurationDelegate.java
index e0e20ce..e8cc427 100644
--- a/rcp/org.eclipse.rcptt.launching.configuration/src/org/eclipse/rcptt/launching/configuration/Q7LaunchConfigurationDelegate.java
+++ b/rcp/org.eclipse.rcptt.launching.configuration/src/org/eclipse/rcptt/launching/configuration/Q7LaunchConfigurationDelegate.java
@@ -253,7 +253,7 @@
collector.addInstallationBundle(entry.getKey(),
BundleStart.fromModelString(entry.getValue()));
}
- for (ITargetLocation extra : target.getQ7Target().getExtras()) {
+ for (ITargetLocation extra : target.getTarget().getTargetLocations()) {
if (!Q7ExternalLaunchDelegate.isQ7BundleContainer(extra)) {
continue;
}