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