boolean strict = "strict".equals(((StateImpl) getBundle().getContainingState()).getPlatformProperties().get("osgi.resolverMode"));
boolean strict = Constants.STRICT_MODE.equals(((StateImpl) getBundle().getContainingState()).getPlatformProperties()[0].get(Constants.OSGI_RESOLVER_MODE));
	public boolean isSatisfiedBy(BaseDescription supplier) {		if (!(supplier instanceof ExportPackageDescription))			return false;		ExportPackageDescription pkgDes = (ExportPackageDescription) supplier;		// If we are in strict mode, check to see if the export specifies friends.		// If it does, are we one of the friends 		String[] friends = (String[]) pkgDes.getDirective(Constants.FRIENDS_DIRECTIVE);		if (friends != null) {			boolean strict = "strict".equals(((StateImpl) getBundle().getContainingState()).getPlatformProperties().get("osgi.resolverMode"));			if (strict) {				boolean found = false;				for (int i = 0; i < friends.length; i++)					if (getBundle().getSymbolicName().equals(friends[i]))						found = true;				if (!found)					return false;			}		}		boolean matchName = false;		if (symbolicName != null) {			BundleDescription exporter = pkgDes.getExporter();			if (!symbolicName.equals(exporter.getSymbolicName()))				return false;			if (getBundleVersionRange() != null && !getBundleVersionRange().isIncluded(exporter.getVersion()))				return false;		}		String name = getName();		// shortcut '*'		// TODO we have logic here for "*" exports for now to make progress in the resolver implementation		if ("*".equals(name) || "*".equals(pkgDes.getName())) {//$NON-NLS-1$ //$NON-NLS-2$			matchName = true;		} else if (name.endsWith(".*")) { //$NON-NLS-1$			if (pkgDes.getName().startsWith((name.substring(0, name.length() - 1))))				matchName = true;		} else if (pkgDes.getName().equals(name)) {			matchName = true;		} else if (pkgDes.getName().endsWith(".*")) { //$NON-NLS-1$			if (name.startsWith((pkgDes.getName().substring(0, name.length() - 1))))				matchName = true;		}		if (!matchName)			return false;		if (getVersionRange() != null && !getVersionRange().isIncluded(pkgDes.getVersion()))			return false;		Map importAttrs = getAttributes();		if (importAttrs != null) {			Map exportAttrs = pkgDes.getAttributes();			if (exportAttrs == null)				return false;			for (Iterator i = importAttrs.keySet().iterator(); i.hasNext();) {				String importKey = (String) i.next();				String importValue = (String) importAttrs.get(importKey);				String exportValue = (String) exportAttrs.get(importKey);				if (exportValue == null || !importValue.equals(exportValue))					return false;			}		}		String[] mandatory = (String[]) pkgDes.getDirective(Constants.MANDATORY_DIRECTIVE);		if (mandatory != null) {			for (int i = 0; i < mandatory.length; i++) {				if (Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE.equals(mandatory[i])) {					if (symbolicName == null)						return false;				} else if (Constants.BUNDLE_VERSION_ATTRIBUTE.equals(mandatory[i])) {					if (bundleVersionRange == null)						return false;				} else if (Constants.PACKAGE_SPECIFICATION_VERSION.equals(mandatory[i]) || Constants.VERSION_ATTRIBUTE.equals(mandatory[i])) {					if (getVersionRange() == null)						return false;				} else { // arbitrary attribute					if (importAttrs == null)						return false;					if (importAttrs.get(mandatory[i]) == null)						return false;				}			}		}		return true;	}