Repository: karaf Updated Branches: refs/heads/master 8702946db -> 261f30a45
[KARAF-3722] Fix the PackageService interface to return all packages Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/261f30a4 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/261f30a4 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/261f30a4 Branch: refs/heads/master Commit: 261f30a45f44409e3ace364fe6f9a3985bdf35c4 Parents: 8702946 Author: Guillaume Nodet <[email protected]> Authored: Tue May 12 14:55:17 2015 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Tue May 12 14:55:17 2015 +0200 ---------------------------------------------------------------------- .../org/apache/karaf/itests/PackageTest.java | 10 +++++----- .../apache/karaf/packages/command/Exports.java | 5 ++--- .../apache/karaf/packages/command/Imports.java | 8 ++++---- .../karaf/packages/core/PackageService.java | 4 ++-- .../core/internal/PackageServiceImpl.java | 14 ++++++++------ .../core/internal/PackagesMBeanImpl.java | 19 +++++++++++-------- 6 files changed, 32 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/261f30a4/itests/src/test/java/org/apache/karaf/itests/PackageTest.java ---------------------------------------------------------------------- diff --git a/itests/src/test/java/org/apache/karaf/itests/PackageTest.java b/itests/src/test/java/org/apache/karaf/itests/PackageTest.java index 24f1e12..815c587 100644 --- a/itests/src/test/java/org/apache/karaf/itests/PackageTest.java +++ b/itests/src/test/java/org/apache/karaf/itests/PackageTest.java @@ -17,6 +17,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.SortedMap; @@ -88,14 +89,13 @@ public class PackageTest extends KarafTestSupport { // Leaving out version to make test easier to manage // We currently expect no duplicate package exports Map<String, Integer> expectedDups = new HashMap<String, Integer>(); - SortedMap<String, PackageVersion> packageVersionMap = packageService.getExports(); + List<PackageVersion> packageVersionMap = packageService.getExports(); - for (String packageNameVersion : packageVersionMap.keySet()) { - PackageVersion pVer = packageVersionMap.get(packageNameVersion); + for (PackageVersion pVer : packageVersionMap) { if (pVer.getBundles().size() > 1) { - String packageName = packageNameVersion.split(":")[0]; + String packageName = pVer.getPackageName(); int expectedNum = expectedDups.containsKey(packageName) ? expectedDups.get(packageName) : 0; - Assert.assertEquals("Expecting number of duplicates for package " + packageNameVersion, expectedNum, pVer.getBundles().size()); + Assert.assertEquals("Expecting number of duplicates for package " + packageName, expectedNum, pVer.getBundles().size()); } } } http://git-wip-us.apache.org/repos/asf/karaf/blob/261f30a4/package/src/main/java/org/apache/karaf/packages/command/Exports.java ---------------------------------------------------------------------- diff --git a/package/src/main/java/org/apache/karaf/packages/command/Exports.java b/package/src/main/java/org/apache/karaf/packages/command/Exports.java index 4eb3fd5..e6a1492 100644 --- a/package/src/main/java/org/apache/karaf/packages/command/Exports.java +++ b/package/src/main/java/org/apache/karaf/packages/command/Exports.java @@ -70,14 +70,13 @@ public class Exports implements Action { } private void showExports() { - SortedMap<String, PackageVersion> exports = packageService.getExports(); + List<PackageVersion> exports = packageService.getExports(); ShellTable table = new ShellTable(); table.column("Package Name"); table.column("Version"); table.column("ID"); table.column("Bundle Name"); - for (String key : exports.keySet()) { - PackageVersion pVer = exports.get(key); + for (PackageVersion pVer : exports) { for (Bundle bundle : pVer.getBundles()) { if (matchesFilter(pVer, bundle)) { table.addRow().addContent(pVer.getPackageName(), http://git-wip-us.apache.org/repos/asf/karaf/blob/261f30a4/package/src/main/java/org/apache/karaf/packages/command/Imports.java ---------------------------------------------------------------------- diff --git a/package/src/main/java/org/apache/karaf/packages/command/Imports.java b/package/src/main/java/org/apache/karaf/packages/command/Imports.java index 9e9330a..b070dd0 100644 --- a/package/src/main/java/org/apache/karaf/packages/command/Imports.java +++ b/package/src/main/java/org/apache/karaf/packages/command/Imports.java @@ -16,6 +16,7 @@ */ package org.apache.karaf.packages.command; +import java.util.List; import java.util.SortedMap; import org.apache.karaf.packages.core.PackageRequirement; @@ -50,7 +51,7 @@ public class Imports implements Action { @Override public Object execute() throws Exception { - SortedMap<String, PackageRequirement> imports = packageService.getImports(); + List<PackageRequirement> imports = packageService.getImports(); ShellTable table = new ShellTable(); if (showFilter) { table.column("Filter"); @@ -62,13 +63,12 @@ public class Imports implements Action { table.column("ID"); table.column("Bundle Name"); - for (String filter : imports.keySet()) { - PackageRequirement req = imports.get(filter); + for (PackageRequirement req : imports) { if (matchesFilter(req)) { Bundle bundle = req.getBundle(); Row row = table.addRow(); if (showFilter) { - row.addContent(filter); + row.addContent(req.getFilter()); } else { row.addContent(req.getPackageName(), req.getVersionRange()); } http://git-wip-us.apache.org/repos/asf/karaf/blob/261f30a4/package/src/main/java/org/apache/karaf/packages/core/PackageService.java ---------------------------------------------------------------------- diff --git a/package/src/main/java/org/apache/karaf/packages/core/PackageService.java b/package/src/main/java/org/apache/karaf/packages/core/PackageService.java index 28a065d..0ea285b 100644 --- a/package/src/main/java/org/apache/karaf/packages/core/PackageService.java +++ b/package/src/main/java/org/apache/karaf/packages/core/PackageService.java @@ -38,7 +38,7 @@ public interface PackageService { * * @return */ - SortedMap<String, PackageVersion> getExports(); + List<PackageVersion> getExports(); /** * Gets a map of all package imports. @@ -46,6 +46,6 @@ public interface PackageService { * * @return */ - SortedMap<String, PackageRequirement> getImports(); + List<PackageRequirement> getImports(); } http://git-wip-us.apache.org/repos/asf/karaf/blob/261f30a4/package/src/main/java/org/apache/karaf/packages/core/internal/PackageServiceImpl.java ---------------------------------------------------------------------- diff --git a/package/src/main/java/org/apache/karaf/packages/core/internal/PackageServiceImpl.java b/package/src/main/java/org/apache/karaf/packages/core/internal/PackageServiceImpl.java index 7fc2949..6629543 100644 --- a/package/src/main/java/org/apache/karaf/packages/core/internal/PackageServiceImpl.java +++ b/package/src/main/java/org/apache/karaf/packages/core/internal/PackageServiceImpl.java @@ -17,6 +17,8 @@ package org.apache.karaf.packages.core.internal; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.SortedMap; @@ -40,7 +42,7 @@ public class PackageServiceImpl implements PackageService { this.bundleContext = bundleContext; } - public SortedMap<String, PackageVersion> getExports() { + public List<PackageVersion> getExports() { Bundle[] bundles = bundleContext.getBundles(); SortedMap<String, PackageVersion> packageVersionMap = new TreeMap<String, PackageVersion>(); for (Bundle bundle : bundles) { @@ -61,24 +63,24 @@ public class PackageServiceImpl implements PackageService { } } } - return packageVersionMap; + return new ArrayList<>(packageVersionMap.values()); } @Override - public SortedMap<String, PackageRequirement> getImports() { + public List<PackageRequirement> getImports() { Bundle[] bundles = bundleContext.getBundles(); - SortedMap<String, PackageRequirement> filterMap = new TreeMap<String, PackageRequirement>(); + SortedMap<String, PackageRequirement> requirements = new TreeMap<>(); for (Bundle bundle : bundles) { BundleRevision rev = bundle.adapt(BundleRevision.class); if (rev != null) { List<BundleRequirement> reqs = rev.getDeclaredRequirements(BundleRevision.PACKAGE_NAMESPACE); for (BundleRequirement req : reqs) { PackageRequirement preq = create(req, bundle); - filterMap.put(preq.getFilter(), preq); + requirements.put(preq.getPackageName() + "|" + preq.getFilter() + "|" + preq.getBundle().getBundleId(), preq); } } } - return filterMap; + return new ArrayList<>(requirements.values()); } private boolean checkResolveAble(BundleRequirement req) { http://git-wip-us.apache.org/repos/asf/karaf/blob/261f30a4/package/src/main/java/org/apache/karaf/packages/core/internal/PackagesMBeanImpl.java ---------------------------------------------------------------------- diff --git a/package/src/main/java/org/apache/karaf/packages/core/internal/PackagesMBeanImpl.java b/package/src/main/java/org/apache/karaf/packages/core/internal/PackagesMBeanImpl.java index bce7b8f..57d098f 100644 --- a/package/src/main/java/org/apache/karaf/packages/core/internal/PackagesMBeanImpl.java +++ b/package/src/main/java/org/apache/karaf/packages/core/internal/PackagesMBeanImpl.java @@ -24,6 +24,7 @@ import javax.management.StandardMBean; import javax.management.openmbean.CompositeData; import javax.management.openmbean.CompositeDataSupport; import javax.management.openmbean.CompositeType; +import javax.management.openmbean.KeyAlreadyExistsException; import javax.management.openmbean.OpenDataException; import javax.management.openmbean.OpenType; import javax.management.openmbean.SimpleType; @@ -65,10 +66,9 @@ public class PackagesMBeanImpl extends StandardMBean implements PackagesMBean { new String[] {"Name", "Version", "ID"}); TabularData table = new TabularDataSupport(tableType); - SortedMap<String, PackageVersion> exports = packageService.getExports(); + List<PackageVersion> exports = packageService.getExports(); - for (String key : exports.keySet()) { - PackageVersion export = exports.get(key); + for (PackageVersion export : exports) { for (Bundle bundle : export.getBundles()) { Object[] data = new Object[] { export.getPackageName(), @@ -76,7 +76,7 @@ public class PackagesMBeanImpl extends StandardMBean implements PackagesMBean { bundle.getBundleId(), bundle.getSymbolicName()}; CompositeData comp = new CompositeDataSupport(bundleType, names, data); - LOGGER.debug("Adding CompositeDataSupport {} for key: {}", comp, key); + LOGGER.debug("Adding CompositeDataSupport {}", comp); table.put(comp); } } @@ -104,10 +104,9 @@ public class PackagesMBeanImpl extends StandardMBean implements PackagesMBean { new String[] {"Filter", "ID"}); TabularData table = new TabularDataSupport(tableType); - SortedMap<String, PackageRequirement> imports = packageService.getImports(); + List<PackageRequirement> imports = packageService.getImports(); - for (String key : imports.keySet()) { - PackageRequirement req = imports.get(key); + for (PackageRequirement req : imports) { Object[] data = new Object[] { req.getPackageName(), req.getFilter(), @@ -116,7 +115,11 @@ public class PackagesMBeanImpl extends StandardMBean implements PackagesMBean { req.getBundle().getSymbolicName(), req.isResolveable()}; CompositeData comp = new CompositeDataSupport(bundleType, names, data); - table.put(comp); + try { + table.put(comp); + }catch (KeyAlreadyExistsException e) { + throw new RuntimeException("Id: " + req.getBundle().getBundleId() + ", filter: " + req.getFilter(), e); + } } return table; } catch (RuntimeException e) {
