diff --git a/ui/org.eclipse.pde.bnd.ui/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.bnd.ui/META-INF/MANIFEST.MF
index 013432c91f3..fae4e9c5091 100644
--- a/ui/org.eclipse.pde.bnd.ui/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.bnd.ui/META-INF/MANIFEST.MF
@@ -28,7 +28,12 @@ Import-Package: aQute.bnd.build;version="4.5.0",
aQute.bnd.service.clipboard;version="[1.0.0,2.0.0)",
aQute.bnd.service.progress;version="[1.3.0,2.0.0)",
aQute.bnd.service.repository;version="[1.6.0,2.0.0)",
+ aQute.bnd.service.resource;version="[1.1.0,2.0.0)",
+ aQute.bnd.unmodifiable;version="[2.1.0,3.0.0)",
aQute.bnd.version;version="[2.3.0,3.0.0)",
+ aQute.lib.io;version="[4.5.0,5.0.0)",
+ aQute.lib.strings;version="[1.12.0,2.0.0)",
+ aQute.libg.glob;version="[1.6.0,2.0.0)",
aQute.service.reporter;version="[1.2.0,2.0.0)",
jakarta.xml.bind;version="[4.0.0,5.0.0)",
jakarta.xml.bind.annotation;version="[4.0.0,5.0.0)",
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/brkpi_obj.svg b/ui/org.eclipse.pde.bnd.ui/icons/brkpi_obj.svg
new file mode 100644
index 00000000000..b56f918486d
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/brkpi_obj.svg
@@ -0,0 +1,147 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/bundle-importer-exporter.svg b/ui/org.eclipse.pde.bnd.ui/icons/bundle-importer-exporter.svg
new file mode 100644
index 00000000000..b135cce3ade
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/bundle-importer-exporter.svg
@@ -0,0 +1,485 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/class_obj.svg b/ui/org.eclipse.pde.bnd.ui/icons/class_obj.svg
new file mode 100644
index 00000000000..12fdd7ed1b3
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/class_obj.svg
@@ -0,0 +1,165 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/connections.png b/ui/org.eclipse.pde.bnd.ui/icons/connections.png
new file mode 100644
index 00000000000..388022bd0cc
Binary files /dev/null and b/ui/org.eclipse.pde.bnd.ui/icons/connections.png differ
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/excludeMode_filter.svg b/ui/org.eclipse.pde.bnd.ui/icons/excludeMode_filter.svg
new file mode 100644
index 00000000000..f6a4a1bb5c0
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/excludeMode_filter.svg
@@ -0,0 +1,110 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/help.gif b/ui/org.eclipse.pde.bnd.ui/icons/help.gif
deleted file mode 100644
index 9d70301dae3..00000000000
Binary files a/ui/org.eclipse.pde.bnd.ui/icons/help.gif and /dev/null differ
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/help.svg b/ui/org.eclipse.pde.bnd.ui/icons/help.svg
new file mode 100644
index 00000000000..cfe92203561
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/help.svg
@@ -0,0 +1,75 @@
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/jar_obj.svg b/ui/org.eclipse.pde.bnd.ui/icons/jar_obj.svg
new file mode 100644
index 00000000000..5e37a58bc86
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/jar_obj.svg
@@ -0,0 +1,242 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/jcu_obj.svg b/ui/org.eclipse.pde.bnd.ui/icons/jcu_obj.svg
new file mode 100644
index 00000000000..2f6738bc744
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/jcu_obj.svg
@@ -0,0 +1,155 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/lock.png b/ui/org.eclipse.pde.bnd.ui/icons/lock.png
new file mode 100644
index 00000000000..e9ab2231967
Binary files /dev/null and b/ui/org.eclipse.pde.bnd.ui/icons/lock.png differ
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/lockedstate.svg b/ui/org.eclipse.pde.bnd.ui/icons/lockedstate.svg
new file mode 100644
index 00000000000..7767244e411
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/lockedstate.svg
@@ -0,0 +1,293 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/package.gif b/ui/org.eclipse.pde.bnd.ui/icons/package.gif
deleted file mode 100644
index 131c28da405..00000000000
Binary files a/ui/org.eclipse.pde.bnd.ui/icons/package.gif and /dev/null differ
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/package_obj.svg b/ui/org.eclipse.pde.bnd.ui/icons/package_obj.svg
new file mode 100644
index 00000000000..b70d20b4500
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/package_obj.svg
@@ -0,0 +1,327 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/repositories.svg b/ui/org.eclipse.pde.bnd.ui/icons/repositories.svg
new file mode 100644
index 00000000000..b6239bf9843
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/repositories.svg
@@ -0,0 +1,280 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/signed_yes_tbl.svg b/ui/org.eclipse.pde.bnd.ui/icons/signed_yes_tbl.svg
new file mode 100644
index 00000000000..0fca5f284fc
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/signed_yes_tbl.svg
@@ -0,0 +1,313 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/tricks.svg b/ui/org.eclipse.pde.bnd.ui/icons/tricks.svg
new file mode 100644
index 00000000000..b45ba974def
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/tricks.svg
@@ -0,0 +1,204 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/warning_obj.gif b/ui/org.eclipse.pde.bnd.ui/icons/warning_obj.gif
deleted file mode 100644
index 2b2e50fe7cb..00000000000
Binary files a/ui/org.eclipse.pde.bnd.ui/icons/warning_obj.gif and /dev/null differ
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/warning_obj.svg b/ui/org.eclipse.pde.bnd.ui/icons/warning_obj.svg
new file mode 100644
index 00000000000..d96c6a2f93a
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/warning_obj.svg
@@ -0,0 +1,149 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/webresources16.svg b/ui/org.eclipse.pde.bnd.ui/icons/webresources16.svg
new file mode 100644
index 00000000000..7524d977f84
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/icons/webresources16.svg
@@ -0,0 +1,374 @@
+
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/icons/whiteboard.png b/ui/org.eclipse.pde.bnd.ui/icons/whiteboard.png
new file mode 100644
index 00000000000..e56900d7283
Binary files /dev/null and b/ui/org.eclipse.pde.bnd.ui/icons/whiteboard.png differ
diff --git a/ui/org.eclipse.pde.bnd.ui/plugin.xml b/ui/org.eclipse.pde.bnd.ui/plugin.xml
index f2ffd41f427..8b94fec7c63 100644
--- a/ui/org.eclipse.pde.bnd.ui/plugin.xml
+++ b/ui/org.eclipse.pde.bnd.ui/plugin.xml
@@ -35,5 +35,11 @@
icon="icons/database.png" id="pde.bnd.ui.repositoriesView"
name="Bundle Repositories" restorable="true">
+
+
+
diff --git a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/EditorUtils.java b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/EditorUtils.java
index 6678152ec2d..765be5e31d1 100644
--- a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/EditorUtils.java
+++ b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/EditorUtils.java
@@ -74,7 +74,7 @@ public void run() {
};
btn.setEnabled(true);
btn.setToolTipText(tooltipText);
- btn.setImageDescriptor(Resources.getImageDescriptor("help.gif"));
+ btn.setImageDescriptor(Resources.getImageDescriptor("help.svg"));
return btn;
}
diff --git a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/ResourceUtils.java b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/ResourceUtils.java
index 6f316300cb7..13acd196893 100644
--- a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/ResourceUtils.java
+++ b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/ResourceUtils.java
@@ -129,9 +129,9 @@ public static Capability getContentCapability(Resource resource) throws IllegalA
String urlString = String.valueOf(url);
try {
- new URL(urlString);
+ new URI(urlString).toURL();
return c;
- } catch (MalformedURLException mue) {
+ } catch (MalformedURLException | URISyntaxException mue) {
// Oh well, just try the next one
}
}
@@ -155,9 +155,9 @@ public static URI getURI(Capability contentCapability) {
return ((URL) uriObj).toURI();
}
- if (uriObj instanceof String) {
+ if (uriObj instanceof String uriStr) {
try {
- URL url = new URL((String) uriObj);
+ URL url = new URI(uriStr).toURL();
return url.toURI();
} catch (MalformedURLException mfue) {
// Ignore
diff --git a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/Resources.java b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/Resources.java
index 6953225c92f..b2e53d71946 100644
--- a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/Resources.java
+++ b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/Resources.java
@@ -65,6 +65,10 @@ private static URL getImageUrl(String key) {
if (resource != null) {
return resource;
}
+ resource = Resources.class.getResource("/icons/" + key + ".svg");
+ if (resource != null) {
+ return resource;
+ }
resource = Resources.class.getResource("/icons/" + key + ".gif");
if (resource != null) {
return resource;
diff --git a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/FileUtils.java b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/FileUtils.java
new file mode 100644
index 00000000000..e0f670274f9
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/FileUtils.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2021 bndtools project and others.
+ *
+* This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Neil Bartlett - initial API and implementation
+ * Ferry Huberts - ongoing enhancements
+ * BJ Hargrave - ongoing enhancements
+ * Fr Jeremy Krieg - ongoing enhancements
+ * Jürgen Albert - ongoing enhancements
+*******************************************************************************/
+package org.eclipse.pde.bnd.ui.internal;
+
+import java.io.File;
+import java.util.Arrays;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+public class FileUtils {
+
+
+ public static IFile[] getWorkspaceFiles(File javaFile) {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace()
+ .getRoot();
+ IFile[] candidates = root.findFilesForLocationURI(javaFile.toURI());
+ Arrays.sort(candidates, (a, b) -> Integer.compare(a.getFullPath()
+ .segmentCount(),
+ b.getFullPath()
+ .segmentCount()));
+ return candidates;
+ }
+}
diff --git a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/ItalicStyler.java b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/ItalicStyler.java
new file mode 100644
index 00000000000..b221e321341
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/ItalicStyler.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2019 bndtools project and others.
+ *
+* This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Neil Bartlett - initial API and implementation
+ * BJ Hargrave - ongoing enhancements
+*******************************************************************************/
+package org.eclipse.pde.bnd.ui.internal;
+
+import org.eclipse.jface.preference.JFacePreferences;
+import org.eclipse.jface.resource.ColorRegistry;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.StyledString.Styler;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.TextStyle;
+
+public class ItalicStyler extends Styler {
+
+ public static final Styler INSTANCE_DEFAULT = new ItalicStyler(JFaceResources.DEFAULT_FONT, null, null);
+ public static final Styler INSTANCE_QUALIFIER = new ItalicStyler(JFaceResources.DEFAULT_FONT,
+ JFacePreferences.QUALIFIER_COLOR, null);
+ public static final Styler INSTANCE_ERROR = new ItalicStyler(JFaceResources.DEFAULT_FONT,
+ JFacePreferences.ERROR_COLOR, null);
+
+ private final String fontName;
+ private final String fForegroundColorName;
+ private final String fBackgroundColorName;
+
+ public ItalicStyler(String fontName, String foregroundColorName, String backgroundColorName) {
+ this.fontName = fontName;
+ fForegroundColorName = foregroundColorName;
+ fBackgroundColorName = backgroundColorName;
+ }
+
+ @Override
+ public void applyStyles(TextStyle textStyle) {
+ ColorRegistry colorRegistry = JFaceResources.getColorRegistry();
+ Font font = JFaceResources.getFontRegistry()
+ .getItalic(fontName);
+ if (fForegroundColorName != null) {
+ textStyle.foreground = colorRegistry.get(fForegroundColorName);
+ }
+ if (fBackgroundColorName != null) {
+ textStyle.background = colorRegistry.get(fBackgroundColorName);
+ }
+ textStyle.font = font;
+ }
+}
diff --git a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/PartAdapter.java b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/PartAdapter.java
new file mode 100644
index 00000000000..d8fc15e526c
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/internal/PartAdapter.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2019 bndtools project and others.
+ *
+* This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Neil Bartlett - initial API and implementation
+ * BJ Hargrave - ongoing enhancements
+*******************************************************************************/
+package org.eclipse.pde.bnd.ui.internal;
+
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+
+public abstract class PartAdapter implements IPartListener {
+
+ @Override
+ public void partActivated(IWorkbenchPart part) {}
+
+ @Override
+ public void partBroughtToTop(IWorkbenchPart part) {}
+
+ @Override
+ public void partClosed(IWorkbenchPart part) {}
+
+ @Override
+ public void partDeactivated(IWorkbenchPart part) {}
+
+ @Override
+ public void partOpened(IWorkbenchPart part) {}
+}
diff --git a/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/model/resolution/CapReqComparator.java b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/model/resolution/CapReqComparator.java
new file mode 100644
index 00000000000..8b21f648254
--- /dev/null
+++ b/ui/org.eclipse.pde.bnd.ui/src/org/eclipse/pde/bnd/ui/model/resolution/CapReqComparator.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2015, 2023 bndtools project and others.
+ *
+* This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Neil Bartlett - initial API and implementation
+ * BJ Hargrave - ongoing enhancements
+ * Peter Kriens - ongoing enhancements
+*******************************************************************************/
+package org.eclipse.pde.bnd.ui.model.resolution;
+
+import java.util.Collection;
+import java.util.Comparator;
+
+import org.eclipse.pde.bnd.ui.model.resource.R5LabelFormatter;
+import org.osgi.framework.Version;
+import org.osgi.resource.Capability;
+import org.osgi.resource.Requirement;
+
+import aQute.bnd.osgi.resource.ResourceUtils;
+
+public class CapReqComparator implements Comparator