Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Watson2005-09-12 16:44:01 +0000
committerThomas Watson2005-09-12 16:44:01 +0000
commit5b0be2eb34ff89866950344c3c663963ba4b020e (patch)
treee965db27307f66ce318ac65b859b449bb1706778 /bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java
parent8ac6eb64d00ad458650e61791d546b6cad995fef (diff)
downloadrt.equinox.framework-5b0be2eb34ff89866950344c3c663963ba4b020e.tar.gz
rt.equinox.framework-5b0be2eb34ff89866950344c3c663963ba4b020e.tar.xz
rt.equinox.framework-5b0be2eb34ff89866950344c3c663963ba4b020e.zip
Bug 88824 [osgi] state must report all resolution errorsv20050912
Diffstat (limited to 'bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java')
-rw-r--r--bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java
index efc2da9e9..4c1c45232 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java
@@ -17,10 +17,12 @@ import org.osgi.framework.*;
public class PermissionChecker {
private BundleContext context;
private boolean checkPermissions = false;
+ private ResolverImpl resolver;
- public PermissionChecker(BundleContext context, boolean checkPermissions) {
+ public PermissionChecker(BundleContext context, boolean checkPermissions, ResolverImpl resolver) {
this.context = context;
this.checkPermissions = checkPermissions;
+ this.resolver = resolver;
}
/*
@@ -33,21 +35,44 @@ public class PermissionChecker {
boolean success = false;
Permission producerPermission = null, consumerPermission = null;
Bundle producer = null, consumer = null;
+ int errorType = 0;
if (vc instanceof ImportPackageSpecification) {
+ errorType = ResolverError.IMPORT_PACKAGE_PERMISSION;
producerPermission = new PackagePermission(bd.getName(), PackagePermission.EXPORT);
consumerPermission = new PackagePermission(vc.getName(), PackagePermission.IMPORT);
producer = context.getBundle(((ExportPackageDescription) bd).getExporter().getBundleId());
} else {
boolean requireBundle = vc instanceof BundleSpecification;
+ errorType = requireBundle ? ResolverError.REQUIRE_BUNDLE_PERMISSION : ResolverError.FRAGMENT_BUNDLE_PERMISSION;
producerPermission = new BundlePermission(bd.getName(), requireBundle ? BundlePermission.PROVIDE : BundlePermission.HOST);
consumerPermission = new BundlePermission(vc.getName(), requireBundle ? BundlePermission.REQUIRE : BundlePermission.FRAGMENT);
producer = context.getBundle(((BundleDescription) bd).getBundleId());
}
consumer = context.getBundle(vc.getBundle().getBundleId());
- if (producer != null && (producer.getState() & Bundle.UNINSTALLED) == 0)
+ if (producer != null && (producer.getState() & Bundle.UNINSTALLED) == 0) {
success = producer.hasPermission(producerPermission);
- if (success && consumer != null && (consumer.getState() & Bundle.UNINSTALLED) == 0)
+ if (!success) {
+ BundleDescription desc = null;
+ switch (errorType) {
+ case ResolverError.IMPORT_PACKAGE_PERMISSION:
+ errorType = ResolverError.EXPORT_PACKAGE_PERMISSION;
+ desc = ((ExportPackageDescription) bd).getExporter();
+ break;
+ case ResolverError.REQUIRE_BUNDLE_PERMISSION:
+ case ResolverError.FRAGMENT_BUNDLE_PERMISSION:
+ errorType = errorType == ResolverError.REQUIRE_BUNDLE_PERMISSION ? ResolverError.PROVIDE_BUNDLE_PERMISSION : ResolverError.HOST_BUNDLE_PERMISSION;
+ desc = (BundleDescription) bd;
+ break;
+ }
+ resolver.getState().addResolverError(vc.getBundle(), errorType, bd.toString());
+ }
+ }
+ if (success && consumer != null && (consumer.getState() & Bundle.UNINSTALLED) == 0) {
success = consumer.hasPermission(consumerPermission);
+ if (!success)
+ resolver.getState().addResolverError(vc.getBundle(), errorType, vc.toString());
+ }
+
return success;
}
}

Back to the top