try {
PackageAdmin packageAdmin = visitor.getPackageAdmin();
if (packageAdmin == null) {
throw new IOException("PackageAdmin is not available");
}
TabularDataSupport dataSupport = new TabularDataSupport(PACKAGES_TYPE);
ExportedPackage[] exportedPackages = packageAdmin.getExportedPackages((Bundle) null);
Map<String, PackageInfo> packages = new HashMap<String, PackageInfo>();
if (exportedPackages != null) {
for (ExportedPackage exportedPackage : exportedPackages) {
String key = exportedPackage.getName() + ";" + exportedPackage.getVersion().toString();
PackageInfo packageInfo = packages.get(key);
if (packageInfo == null) {
packageInfo = new PackageInfo(exportedPackage.getName(), exportedPackage.getVersion(), exportedPackage.isRemovalPending());
packages.put(key, packageInfo);
}
Bundle exportingBundle = exportedPackage.getExportingBundle();
if (exportingBundle != null) {
packageInfo.exportingBundles.add(exportingBundle);
}
Bundle[] importingBundles = exportedPackage.getImportingBundles();
if (importingBundles != null) {
packageInfo.importingBundles.addAll(Arrays.asList(importingBundles));
}
}
}
Collection<PackageInfo> packageInfos = packages.values();
for (PackageInfo packageInfo : packageInfos) {
Map<String, Object> values = new HashMap<String, Object>();
values.put(NAME, packageInfo.name);
values.put(VERSION, packageInfo.version.toString());
values.put(REMOVAL_PENDING, packageInfo.isRemovalPending);
values.put(EXPORTING_BUNDLES, Utils.toLongArray(Utils.getIds(packageInfo.exportingBundles.toArray(new Bundle[packageInfo.exportingBundles.size()]))));
values.put(IMPORTING_BUNDLES, Utils.toLongArray(Utils.getIds(packageInfo.importingBundles.toArray(new Bundle[packageInfo.importingBundles.size()]))));
dataSupport.put(new CompositeDataSupport(PACKAGE_TYPE, values));
}
return dataSupport;
} catch (IOException e) {
logVisitor.warning("listPackages error", e);
throw e;