diff options
author | Thomas Watson | 2005-09-12 16:44:01 +0000 |
---|---|---|
committer | Thomas Watson | 2005-09-12 16:44:01 +0000 |
commit | 5b0be2eb34ff89866950344c3c663963ba4b020e (patch) | |
tree | e965db27307f66ce318ac65b859b449bb1706778 /bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/PermissionChecker.java | |
parent | 8ac6eb64d00ad458650e61791d546b6cad995fef (diff) | |
download | rt.equinox.framework-5b0be2eb34ff89866950344c3c663963ba4b020e.tar.gz rt.equinox.framework-5b0be2eb34ff89866950344c3c663963ba4b020e.tar.xz rt.equinox.framework-5b0be2eb34ff89866950344c3c663963ba4b020e.zip |
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.java | 31 |
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; } } |