357eef5
From 6c608cd76dfabdc7cd57fe581eee1533ff82130a Mon Sep 17 00:00:00 2001
0199501
From: Roland Grunberg <rgrunber@redhat.com>
0199501
Date: Thu, 7 Apr 2016 10:23:49 -0400
0199501
Subject: [PATCH] Support reading BundleInfo from p2 Droplets enabled
0199501
 installations.
0199501
b201a3b
- Additionally support reading source bundles from p2 Droplets location
0199501
---
c202a65
 .../org.eclipse.pde.core/META-INF/MANIFEST.MF |  1 +
c202a65
 .../eclipse/pde/internal/core/P2Utils.java    | 50 +++++++++++++++++--
357eef5
 .../org.eclipse.pde.doc.user/pdeOptions.txt   |  1 +
357eef5
 3 files changed, 47 insertions(+), 5 deletions(-)
0199501
c202a65
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/eclipse.pde.ui/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
357eef5
index 27e51faa6..0735dc414 100644
c202a65
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
c202a65
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
c202a65
@@ -102,5 +102,6 @@ Require-Bundle:
0199501
  org.eclipse.core.filesystem;bundle-version="[1.0.0,2.0.0)"
0199501
 Eclipse-LazyStart: true
844d686
 Bundle-RequiredExecutionEnvironment: JavaSE-11
c202a65
+Import-Package: org.eclipse.equinox.internal.simpleconfigurator.utils
0199501
 Bundle-ActivationPolicy: lazy
c48d605
 Automatic-Module-Name: org.eclipse.pde.core
c202a65
diff --git a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
c202a65
index 696d2318f..7ab4596d5 100644
c202a65
--- a/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
c202a65
+++ b/eclipse.pde.ui/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
c202a65
@@ -17,8 +17,9 @@ package org.eclipse.pde.internal.core;
1b7ea00
 import java.io.File;
1b7ea00
 import java.io.FileNotFoundException;
1b7ea00
 import java.io.IOException;
b201a3b
-import java.net.MalformedURLException;
b201a3b
-import java.net.URL;
b201a3b
+import java.net.*;
b201a3b
+import java.nio.file.Paths;
1b7ea00
+import java.util.Arrays;
1b7ea00
 import java.util.ArrayList;
1b7ea00
 import java.util.Collection;
1b7ea00
 import java.util.HashMap;
c202a65
@@ -31,7 +32,9 @@ import org.eclipse.core.runtime.IStatus;
1b7ea00
 import org.eclipse.core.runtime.NullProgressMonitor;
1b7ea00
 import org.eclipse.core.runtime.Path;
1b7ea00
 import org.eclipse.core.runtime.Status;
1b7ea00
+import org.eclipse.core.runtime.URIUtil;
0199501
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
0199501
+import org.eclipse.equinox.internal.simpleconfigurator.utils.SimpleConfiguratorUtils;
0199501
 import org.eclipse.equinox.p2.core.IProvisioningAgent;
0199501
 import org.eclipse.equinox.p2.core.IProvisioningAgentProvider;
1b7ea00
 import org.eclipse.equinox.p2.engine.IEngine;
c202a65
@@ -60,6 +63,7 @@ import org.eclipse.pde.core.plugin.IPluginModelBase;
1b7ea00
 import org.eclipse.pde.core.plugin.TargetPlatform;
b201a3b
 import org.eclipse.pde.internal.build.BundleHelper;
b201a3b
 import org.eclipse.pde.internal.core.plugin.PluginBase;
b201a3b
+import org.eclipse.pde.internal.core.util.ManifestUtils;
b201a3b
 import org.osgi.framework.Constants;
b201a3b
 
b201a3b
 /**
c202a65
@@ -139,7 +143,16 @@ public class P2Utils {
0199501
 		try {
0199501
 			URL bundlesTxt = new URL(configurationArea.getProtocol(), configurationArea.getHost(), new File(configurationArea.getFile(), SimpleConfiguratorManipulator.BUNDLES_INFO_PATH).getAbsolutePath());
0199501
 			File home = basePath.toFile();
0199501
-			BundleInfo bundles[] = getBundlesFromFile(bundlesTxt, home);
0199501
+			List<org.eclipse.equinox.internal.simpleconfigurator.utils.BundleInfo> ibundleList = SimpleConfiguratorUtils.readConfiguration(bundlesTxt, home.toURI());
b201a3b
+			List<BundleInfo> bundleList = new ArrayList<>();
0199501
+			for (org.eclipse.equinox.internal.simpleconfigurator.utils.BundleInfo b : ibundleList) {
0199501
+				URI location = b.getLocation();
0199501
+				if (!location.isAbsolute() && b.getBaseLocation() != null)
0199501
+					location = URIUtil.makeAbsolute(location, b.getBaseLocation());
0199501
+				BundleInfo binfo = new BundleInfo(b.getSymbolicName(), b.getVersion(), location, b.getStartLevel(), b.isMarkedAsStarted());
0199501
+				bundleList.add(binfo);
0199501
+			}
0199501
+			BundleInfo[] bundles = bundleList.toArray(new BundleInfo[0]);
0199501
 			if (bundles == null || bundles.length == 0) {
0199501
 				return null;
0199501
 			}
c202a65
@@ -168,11 +181,38 @@ public class P2Utils {
b201a3b
 		try {
b201a3b
 			File home = basePath.toFile();
b201a3b
 			URL srcBundlesTxt = new URL(configurationArea.getProtocol(), configurationArea.getHost(), configurationArea.getFile().concat(SimpleConfiguratorManipulator.SOURCE_INFO_PATH));
b201a3b
+			final List<BundleInfo> allSrcBundles = new ArrayList<>();
b201a3b
+			try {
b201a3b
+				for (File infoFile : SimpleConfiguratorUtils.getInfoFiles()) {
b201a3b
+					File pluginsDir = Paths.get(infoFile.getParent(), "plugins").toFile(); //$NON-NLS-1$
b201a3b
+					File[] sourceJars = pluginsDir.listFiles((dir, name) -> {
b201a3b
+						return name.matches(".*\\.source_.*\\.jar$"); //$NON-NLS-1$
b201a3b
+					});
b201a3b
+					for (File sourceJar : sourceJars) {
b201a3b
+						Map<String, String> manifest;
b201a3b
+						try {
b201a3b
+							manifest = ManifestUtils.loadManifest(sourceJar);
b201a3b
+							final String bsn = manifest.get(Constants.BUNDLE_SYMBOLICNAME);
b201a3b
+							final String version = manifest.get(Constants.BUNDLE_VERSION);
b201a3b
+							BundleInfo info = new BundleInfo(bsn, version, sourceJar.toURI(), -1, false);
b201a3b
+							allSrcBundles.add(info);
b201a3b
+						} catch (CoreException e) {
b201a3b
+							// continue
b201a3b
+						}
b201a3b
+					}
b201a3b
+				}
b201a3b
+			} catch (URISyntaxException e) {
b201a3b
+				// continue
b201a3b
+			}
b201a3b
+
b201a3b
 			BundleInfo srcBundles[] = getBundlesFromFile(srcBundlesTxt, home);
b201a3b
-			if (srcBundles == null || srcBundles.length == 0) {
b201a3b
+			if (srcBundles != null && srcBundles.length > 0) {
b201a3b
+				allSrcBundles.addAll(Arrays.asList(srcBundles));
b201a3b
+			}
b201a3b
+			if (allSrcBundles.size() == 0) {
b201a3b
 				return null;
b201a3b
 			}
b201a3b
-			return srcBundles;
b201a3b
+			return allSrcBundles.toArray(new BundleInfo[0]);
22ade32
 		} catch (IOException e) {
b201a3b
 			PDECore.log(e);
b201a3b
 			return null;
357eef5
diff --git a/eclipse.platform.common/bundles/org.eclipse.pde.doc.user/pdeOptions.txt b/eclipse.platform.common/bundles/org.eclipse.pde.doc.user/pdeOptions.txt
357eef5
index 523019ede..d25d89549 100644
357eef5
--- a/eclipse.platform.common/bundles/org.eclipse.pde.doc.user/pdeOptions.txt
357eef5
+++ b/eclipse.platform.common/bundles/org.eclipse.pde.doc.user/pdeOptions.txt
357eef5
@@ -76,6 +76,7 @@
357eef5
 ;${rt.equinox.p2.bundles}/org.eclipse.equinox.p2.repository.tools/${dot.classes}
357eef5
 ;${rt.equinox.p2.bundles}/org.eclipse.equinox.p2.touchpoint.eclipse/${dot.classes}
357eef5
 ;${rt.equinox.p2.bundles}/org.eclipse.equinox.simpleconfigurator.manipulator/${dot.classes}
357eef5
+;${rt.equinox.p2.bundles}/org.eclipse.equinox.simpleconfigurator/${dot.classes}
357eef5
 
357eef5
 -breakiterator
357eef5
 -use
0199501
-- 
357eef5
2.26.2
c202a65